替换pandas数据帧中出现的所有字符串(Python)

nau*_*uti 38 python replace dataframe pandas

我有一个大约20列的pandas数据框.

可以通过手动编写所有列名来替换所有出现的字符串(此处为换行符):

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>")
Run Code Online (Sandbox Code Playgroud)

遗憾的是,这不起作用:

df = df.replace("\n","<br>")
Run Code Online (Sandbox Code Playgroud)

还有其他更优雅的解决方案吗?

Ale*_*ley 74

您可以使用replace并传递字符串来查找/替换为字典键/项:

df.replace({'\n': '<br>'}, regex=True)
Run Code Online (Sandbox Code Playgroud)

例如:

>>> 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>
Run Code Online (Sandbox Code Playgroud)

  • 这对我不起作用!Pandas 版本“0.15.1”,python 2.7.9,Ubuntu 14.04。 (2认同)

Yic*_*ang 16

看来Pandas改变了它的API以避免在处理正则表达式时产生歧义.现在你应该使用:

df.replace({'\n': '<br>'}, regex=True)
Run Code Online (Sandbox Code Playgroud)

例如:

>>> 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>
Run Code Online (Sandbox Code Playgroud)

  • 您还可以使用"inplace = True"来避免创建副本 - http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.replace.html (6认同)

Myk*_*tko 5

您可以迭代所有列并使用以下方法str.replace

for col in df.columns:
   df[col] = df[col].str.replace('\n', '<br>')
Run Code Online (Sandbox Code Playgroud)

该方法默认使用正则表达式。