2017-08-25 19 views
1

私はパンダのデータフレームで文字列置換をしようとしています。代わりに、上記のDFのパンダの部分文字列置換

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 

、私は結果を期待していますように::シリーズでその基本的に交換はので、個々の列をループする必要がある

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修正あなたの問題を使用してstrdf['col3']の変換:

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!ええ、私のユースケースは '|'正規表現の(OR)条件。 –

+0

@ D.prd必要に応じて変更します。しかし、主な修正は '.astype'です。 –

+1

うん、@ COLDSPEED、もう一度おめでとう! –

関連する問題