替换熊猫数据框中所有出现的字符串(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 >>> import pandas as pd >>> 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>') a b 0 1\n 4\n 1 2\n 5 2 3 6\n >>>
为什么当我使用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)的主要内容,如果未能解决你的问题,请参考以下文章