2017-08-25 68 views
1

我试图在熊猫数据框中进行字符串替换。需要循环单个列,所以它基本上是一个系列的替代品:熊猫系列中的部分字符串替换

In [105]: df = pd.DataFrame([['0 - abc', 1, 5], ['0 - abc - xyz', 2, 3]], columns=['col1','col2','col3']) 

In [106]: df 
Out[106]: 
      col1 col2 col3 
0  0 - abc  1  5 
1 0 - abc - xyz  2  3 

In [107]: for col in df.columns: 
    ...:  df[col] = df[col].replace(to_replace='".*"|^0', value=df['col3'], inplace=False, regex=True) 
    ...: 

In [108]: df 
Out[108]: 
    col1 col2 col3 
0  5  1  5 
1  3  2  3 

代替上述DF的,我期待的结果:

In [110]: df_result 
Out[110]: 
      col1 col2 col3 
0  5 - abc  1  5 
1 3 - abc - xyz  2  3 

也就是说,在“0 - ABC ',只有开头的'0'应该被替换为'5'而不是整个字符串。

我在正则表达式中错过了什么?在熊猫中是否有替代方法来完成这种字符串替换?谢谢。

回答

1

使用.astype修复您的问题转换到df['col3']str

In [836]: df.iloc[:, 0].replace('^0', df['col3'].astype(str), regex=True) 
Out[836]: 
0   5 - abc 
1 3 - abc - xyz 
Name: col1, dtype: object 

我已经简化您正则表达式为好,虽然我不100%某些它会满足您的所有用例:

^0 

这只会匹配一个前导零并替代它。您可以根据需要将它合并到您的代码中。

+0

谢谢@COLDSPEED!是的,我的用例需要有'|' (或)条件在正则表达式。 –

+0

@ D.prd当然。根据需要修改。但主要的解决方案是'.astype'。 –

+1

是的,做@COLDSPEED,再次感谢你! –