我有一个df
,我想在上面过滤列并替换str.startswith
参数。示例:
df = pd.DataFrame(data={'fname':['Anky','Anky','Tom','Harry','Harry','Harry'],'lname':['sur1','sur1','sur2','sur3','sur3','sur3'],'role':['','abc','def','ghi','','ijk'],'mobile':['08511663451212','','0851166346','','0851166347',''],'Pmobile':['085116634512','1234567890','8885116634','','+353051166347','0987654321'],'Isactive':['Active','','','','Active','']})
通过执行以下行:
df['Pmobile'][df['Pmobile'].str.startswith(('08','8','+353'),na=False)]
我明白了:
0 085116634512
2 8885116634
4 +353051166347
如何仅替换我在s.str.startswith()
下传递的参数,例如:('08','8','+3538')
,并且不触摸除元组内的起始编号(动态)以外的其他任何编号? >
答案 0 :(得分:1)
您可以使用正则表达式使用熊猫的替换。
下面是示例代码。
df.Pmobile.replace(regex={r'^08':'',r'^8':'',r'^[+]353':''})
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.replace.html
答案 1 :(得分:1)
我觉得这最方便,最简洁
df.Pmobile = df.Pmobile.replace(r'^[08|88|+3538]', '')