2014-09-06 95 views
26

我有一个大约20列的熊猫数据框。替换熊猫数据框中所有出现的字符串(Python)

有可能通过手动编写所有列名替换字符串(这里换行符)的所有事件:

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>") 

是否有任何其他,更优雅的解决方案?

回答

56

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

这并没有为我工作!熊猫版本'0.15.1',python 2.7.9,Ubuntu 14.04。 – 2015-04-06 02:55:00

+1

'Python 2.7.9 | Anaconda 2.1.0(64-bit)| (default,2015年3月9日,16:20:48) [GCC 4.4.7 20120313(Red Hat 4.4.7-1)] on linux2 输入“help”,“copyright”,“credits”或“license”更多信息。 Anaconda由Continuum Analytics提供。 请查看:http://continuum.io/thanks和https://binstar.org >>> import pandas as pd >>> df = pd.DataFrame({'a':['1 \ n '','2','3'],'b':['4 \ n','5','6 \ n']}) >>> df ab 0 1 \ n 4 \ ñ 1 2 \ N 5 2 3 6 \ n >>> df.replace({ '\ n': '
'}) AB 0 1 \ N 4 \ n 1 2 \ N 5 2 3 6 \ n >>> ' – 2015-04-06 02:55:28

+0

感谢您指出这一点@YichuanWang。 – 2015-04-11 11:57:15

9

看来熊猫有改变其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> 
+5

您也可以使用“inplace = True”来避免创建副本 - http://pandas.pydata。组织/大熊猫-文档/稳定/生成/ pandas.DataFrame.replace.html – 2016-03-25 14:34:17

0

这将删除所有新行和不必要的空间。您可以编辑“”。加入指定替换字符

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