web-dev-qa-db-ja.com

pandasデータフレーム(Python)で文字列のすべての出現を置換

pandas約20列のデータフレームがあります。

すべての列名を手動で書き込むことにより、文字列(ここでは改行)のすべての出現を置き換えることができます。

df['columnname1'] = df['columnname1'].str.replace("\n","<br>")
df['columnname2'] = df['columnname2'].str.replace("\n","<br>")
df['columnname3'] = df['columnname3'].str.replace("\n","<br>")
...
df['columnname20'] = df['columnname20'].str.replace("\n","<br>")

残念ながらこれは機能しません:

df = df.replace("\n","<br>")

他のよりエレガントなソリューションはありますか?

37
nauti

replaceを使用して、文字列を渡して、辞書キー/アイテムとして検索/置換できます。

df.replace({'\n': '<br>'}, regex=True)

例えば:

>>> df = pd.DataFrame({'a': ['1\n', '2\n', '3'], 'b': ['4\n', '5', '6\n']})
>>> df
   a    b
0  1\n  4\n
1  2\n  5
2  3    6\n

>>> df.replace({'\n': '<br>'}, regex=True)
   a      b
0  1<br>  4<br>
1  2<br>  5
2  3      6<br>
69
Alex Riley

Pandasは、正規表現を処理する際のあいまいさを避けるためにAPIを変更したようです。

df.replace({'\n': '<br>'}, regex=True)

例えば:

>>> df = pd.DataFrame({'a': ['1\n', '2\n', '3'], 'b': ['4\n', '5', '6\n']})
>>> df
   a    b
0  1\n  4\n
1  2\n  5
2  3    6\n

>>> df.replace({'\n': '<br>'}, regex=True)
   a      b
0  1<br>  4<br>
1  2<br>  5
2  3      6<br>
14
Yichuan Wang

これにより、すべての改行と不要なスペースが削除されます。 '' .joinを編集して、置換文字を指定できます

    df['columnname'] = [''.join(c.split()) for c in df['columnname'].astype(str)]
0
Jasper Kinoti