2016-04-23 31 views
4

使用文件中的标头导入了一系列csv和xls文件。我注意到这些头文件并不干净,所以当我打电话给他们时,我得到一个错误,说有没有这样的属性。我正在寻找的是类似于此的东西;在导入的熊猫数据框中清理标头

使用内置的函数来创建进口头的列表

currentheaders = list(df.columns.values) 

清洁该列表(这是我很卡上的部分)

cleanedheaders = str.strip or regex equivalent 

应用该列表作为新标题

df.columns = ['cleanedheaders'] 

带不工作列表和正则表达式想成为一个数据框,是否有一个等效的函数n列表?

+0

请定义“不干净”。并请提供一些可执行的代码和数据位;这可能有助于获得答案。 – tfv

+0

大多数情况下,您不仅会遇到问题,还会遇到数据问题。所以你应该尝试为'sep'参数找到合适的值。 – MaxU

+2

如果你只是想剥离你的列名:'df.columns = df.columns.str。strip()' – MaxU

回答

1

紧凑和曲ICK的办法是

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 = df.columns.str.strip() 

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

如果任何列名的不是一个字符串,那么最好你将他们都转成字符串,这会工作:

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) 
+0

感谢Thanos的解释,他们幸运地是所有的弦,所以Maxs的方法工作 –

1

该解决方案将去除所有元素中的列表:

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

结果:

[ 'TEST1', 'TEST2']

3

尝试这种情况:

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