使用惯用Python删除pandas列中的空格和换行符?

使用惯用Python删除pandas列中的空格和换行符?,python,pandas,dataframe,list-comprehension,Python,Pandas,Dataframe,List Comprehension,我使用下面的方法替换pandas dataframe列标题中的所有空格和新行字符 我的问题是: 在下面的代码中使用列表理解是一种更有效的循环方式吗 def headerfiller(df): for i in [" ","\n"]: df.columns = [c.replace(i,"_") for c in df.columns] 使用: 使用正则表达式替换: >>> import re >>> re.sub(r'[ \n]'

我使用下面的方法替换pandas dataframe列标题中的所有空格和新行字符

我的问题是:

在下面的代码中使用列表理解是一种更有效的循环方式吗

def headerfiller(df):
    for i in [" ","\n"]:
        df.columns = [c.replace(i,"_") for c in df.columns]
使用:



使用正则表达式替换:

>>> import re
>>> re.sub(r'[ \n]', '_', 'a b c\n')
'a_b_c_'

你可以:

它将丢失尾随空格和换行符(如果有必要的话),并将多个空格等压缩为一个“\u1”:


您可以使用可用于索引对象的字符串方法,在本例中为
columns.str.replace()
,它允许您自己在不循环值的情况下执行此操作:

In [23]: df = pd.DataFrame(np.random.randn(3,3), columns=['a\nb', 'c d', 'e\n f'])

In [24]: df.columns
Out[24]: Index([u'a\nb', u'c d', u'e\n f'], dtype='object')

In [25]: df.columns.str.replace(' |\n', '_')
Out[25]: Index([u'a_b', u'c_d', u'e__f'], dtype='object')

通过使用正则表达式,可以同时替换空格和换行符。参见文档:(对于系列,但方法与索引相同)

Thank you@falsetru我尝试跟踪所有答案的时间,发现正则表达式(导入-重新)方法最有效。此答案已编辑,但此处未反映更改@好吧,我不明白你的意见。您是否尝试单击“编辑”
edited。。几个小时前
link?@falsetru,是的,我可以在单击“编辑”时看到更改。。几个小时前,现在我明白了,这些变化只有在经过同行评审后才会反映出来!再次感谢。谢谢你的回答!虽然您的解决方案是最容易键入的,但我接受了另一个使用regex方法的解决方案作为答案,因为它稍微快一点,并且使用了列表理解。
>>> import re
>>> re.sub(r'[ \n]', '_', 'a b c\n')
'a_b_c_'
import re

def headerfiller(df):
    df.columns = [re.sub(r' \n', '_', c) for c in df.columns]
def headerfiller(df):
    df.columns = ['_'.join(c.split()) for c in df.columns]
In [26]: "_".join("a  b    c\n\n\n".split())
Out[26]: 'a_b_c'
In [23]: df = pd.DataFrame(np.random.randn(3,3), columns=['a\nb', 'c d', 'e\n f'])

In [24]: df.columns
Out[24]: Index([u'a\nb', u'c d', u'e\n f'], dtype='object')

In [25]: df.columns.str.replace(' |\n', '_')
Out[25]: Index([u'a_b', u'c_d', u'e__f'], dtype='object')