仅在系列中用参数替换s.str.start

时间:2018-12-13 05:38:36

标签: python python-3.x pandas

我有一个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'),并且不触摸除元组内的起始编号(动态)以外的其他任何编号? >

2 个答案:

答案 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]', '')