替换熊猫数据框中所有出现的字符串(Python)

Posted

技术标签:

【中文标题】替换熊猫数据框中所有出现的字符串(Python)【英文标题】:Replace all occurrences of a string in a pandas dataframe (Python) 【发布时间】:2014-10-31 03:57:09 【问题描述】:

我有一个大约 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>")

不幸的是,这不起作用:

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

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

【问题讨论】:

【参考方案1】:

您可以使用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>

【讨论】:

这对我不起作用!熊猫版本'0.15.1',python 2.7.9,Ubuntu 14.04。 Python 2.7.9 |Anaconda 2.1.0 (64-bit)| (default, Mar 9 2015, 16:20:48) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux2 Type "help", "copyright", "credits" or "license" for more information. Anaconda is brought to you by Continuum Analytics. Please check out: http://continuum.io/thanks and https://binstar.org &gt;&gt;&gt; import pandas as pd &gt;&gt;&gt; df = pd.DataFrame('a': ['1\n', '2\n', '3'], 'b': ['4\n', '5', '6\n']) &gt;&gt;&gt; df a b 0 1\n 4\n 1 2\n 5 2 3 6\n &gt;&gt;&gt; df.replace('\n': '&lt;br&gt;') a b 0 1\n 4\n 1 2\n 5 2 3 6\n &gt;&gt;&gt; 为什么当我使用df.replace('...': 'stuff', regex=True) 时,它不仅替换了“...”,还替换了所有字符串? %\ ... 留下了数字 tho ... @Raksha - 在正则表达式中,'。'匹配任何字符! (行终止符除外。) 使用反斜杠从字面上匹配一个字符,使用 n 来量化。因此:df.replace('\.3', 'stuff', regex=True)【参考方案2】:

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>

【讨论】:

您也可以使用“inplace=True”来避免创建副本 -- pandas.pydata.org/pandas-docs/stable/generated/… Doc 没有说明不创建副本。 Afaik 只有 2 个函数不会在 pandas 中创建副本 = 就地不会保存任何内容。【参考方案3】:

这将删除所有换行符和不必要的空格。您可以编辑 ' '.join 以指定替换字符

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

【讨论】:

【参考方案4】:

您可以遍历所有列并使用方法str.replace

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

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

【讨论】:

以上是关于替换熊猫数据框中所有出现的字符串(Python)的主要内容,如果未能解决你的问题,请参考以下文章

Python - 替换熊猫数据框中的负无穷大值[重复]

删除熊猫数据框中“标签”列中出现数字后的空格

替换熊猫数据框中部分匹配字符串的列名

在熊猫数据框中替换特殊字符

如何从包含特定列中特定字符串的熊猫数据框中删除行? [复制]

替换熊猫数据框中的列表元素