2017-08-25 67 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,再次感謝你! –