SLg*_*der 0 python replace pandas
我得到了各种格式的电话号码清单:
df = pd.DataFrame(
{'phone': ['0123/12345', '0123-23456', '0123/4455-10', '0123-4455-22'],
'name': ['A-1', 'B-1', 'C/3', 'D/7']})
name phone
0 A-1 0123/12345
1 B-1 0123-23456
2 C/3 0123/4455-10
3 D/7 0123-4455-22
Run Code Online (Sandbox Code Playgroud)
我想要的格式是#0和#2行.
当我专注于#1时,我尝试了以下方法:
df.loc[(df.phone.str.count('-')==1) &
(df.phone.str.count('/')==0)].apply(lambda x: x.str.replace('-', '/'))
Run Code Online (Sandbox Code Playgroud)
这就是数字的诀窍,但不幸的是在名称列上:
name phone
1 B/1 0123/23456
Run Code Online (Sandbox Code Playgroud)
但是不能更改名称列.
所以我有两个问题:
您只能在列电话上使用正则表达式替换(str.replace
方法):
df['phone'] = df.phone.str.replace("^(\d+)-(.*)$", r"\1/\2")
df
# name phone
#0 A-1 0123/12345
#1 B-1 0123/23456
#2 C/3 0123/4455-10
#3 D/7 0123/4455-22
Run Code Online (Sandbox Code Playgroud)
关于正则表达式的解释:
^(\d+)-(.*)$
匹配以数字开头并紧跟破折号的字符串,这是第0行和第2行的情况; 使用后向引用,它将第一个短划线替换为第/
1行和第3行,因为它们与正则表达式不匹配,不会应用任何修改.
归档时间: |
|
查看次数: |
1796 次 |
最近记录: |