Python 清理导入的数据帧中的标头

Python 清理导入的数据帧中的标头,python,pandas,Python,Pandas,使用文件头导入了一系列csv和xls文件。我注意到这些头并不是干净的,所以当我调用它们时,返回一个错误,说没有这样的属性。我想做的是类似的事情 使用内置函数创建导入标题的列表 currentheaders = list(df.columns.values) 清理列表(这是我一直坚持的部分) 将该列表作为新标题应用 df.columns = ['cleanedheaders'] Strip对列表不起作用,而regex想要成为一个数据帧,是否有一个列表的等效函数 此解决方案将剥离列表中的所有元素

使用文件头导入了一系列csv和xls文件。我注意到这些头并不是干净的,所以当我调用它们时,返回一个错误,说没有这样的属性。我想做的是类似的事情

使用内置函数创建导入标题的列表

currentheaders = list(df.columns.values)
清理列表(这是我一直坚持的部分)

将该列表作为新标题应用

df.columns = ['cleanedheaders']

Strip对列表不起作用,而regex想要成为一个数据帧,是否有一个列表的等效函数

此解决方案将剥离列表中的所有元素:

list = [' test1', '   test2  ']
print [l.strip() for l in list]
结果:

['test1','test2']

试试这个:

columns = {c: c.strip() for c in df.columns} # or any cleaning
df.rename(columns, inplace=True)

一个紧凑而快速的方法是

df.columns = [c.strip() for c in df.columns.values.tolist()]

如果您想使用
DataFrame.rename()
,那么您实际上需要这样调用它:

df.rename(columns={c: c.strip() for c in df.columns.values.tolist()}, inplace=True) 

当然,您也可以使用小巧快捷的(MaxU借用的):


请记住,如果任何列名实际上不是字符串,则上述任何解决方案都不会起作用

如果任何列名不是字符串,则理想情况下,您可以将它们全部转换为字符串,这将起作用:

df.columns = [str(i) for i in df.columns.values.tolist()]
或者,如果您不想将列名转换为字符串(我希望是出于某种原因),那么您必须执行以下操作:

df.rename(columns={c: c.strip() for c in df.columns.values.tolist() 
                      if c not in [<list of columns not strings>]}, inplace=True)
df.rename(columns={c:c.strip()表示df.columns.values.tolist()中的c)
如果c不在[]}中,则inplace=True)

请定义“不干净”。并请提供一些可执行位的代码和数据;这可能有助于获得答案。很可能您不仅在标题方面有问题,而且在数据方面也有问题。因此,您应该尝试为
sep
参数找到合适的值。如果您只想去除列名:
df.columns=df.columns.str.strip()
再次感谢Max,数据是干净的,但在每个标题字符串之后键入了各种额外的空格。您的方法有效且优雅感谢Thanos的解释,感谢他们都是字符串,所以Maxs的方法有效
df.columns = [str(i) for i in df.columns.values.tolist()]
df.rename(columns={c: c.strip() for c in df.columns.values.tolist() 
                      if c not in [<list of columns not strings>]}, inplace=True)