清除导入的pandas数据框中的标头

时间:2016-04-23 21:43:33

标签: python pandas

导入了一系列csv和xls文件,使用文件中的标题。我注意到这些标题并不干净,因此当我调用它时,我会收到一条错误,说明没有这样的属性。我想做的事情与此类似;

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

currentheaders = list(df.columns.values)

清理该清单(这是我坚持使用的部分)

cleanedheaders = str.strip or regex equivalent

将该列表应用为新标题

df.columns = ['cleanedheaders']

Strip不会在列表上工作,而正则表达式想要成为一个数据框,列表是否有相同的功能?

3 个答案:

答案 0 :(得分:3)

试试这个:

from pydb import schema

table = schema("user", 3)

答案 1 :(得分:1)

此解决方案将删除列表中的所有元素:

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

结果:

  

[' test1',' test2']

答案 2 :(得分:1)

紧凑而快捷的方式

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)