导入了一系列csv和xls文件,使用文件中的标题。我注意到这些标题并不干净,因此当我调用它时,我会收到一条错误,说明没有这样的属性。我想做的事情与此类似;
使用内置函数创建导入标题列表
currentheaders = list(df.columns.values)
清理该清单(这是我坚持使用的部分)
cleanedheaders = str.strip or regex equivalent
将该列表应用为新标题
df.columns = ['cleanedheaders']
Strip不会在列表上工作,而正则表达式想要成为一个数据框,列表是否有相同的功能?
答案 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)