我将数据放入pandas数据框中,通常使用
清理列标题df.columns = df.columns.str.strip()
但是我最近遇到的数据框具有整数类型的列名,而不是字符串。当我尝试执行.str.strip()时,会引发错误。
我该如何编写一些python代码来从列名称中删除空格(如果它们是字符串)。
我是python的新手,所以手越多越好。
谢谢
答案 0 :(得分:2)
您可以使用列表推导,这在使用Pandas时非常不常见,因为应用内置的Pandas函数通常会更高效(如您所做的那样)。但是对于像固定列名这样简单的事情,这应该没问题:
df = pd.DataFrame(columns=[1, 2, 'A '])
df.columns = [col.strip() if isinstance(col, str) else col for col in df.columns]
结果:
In [75]: df.columns
Out[75]: Index([1, 2, 'A'], dtype='object')
答案 1 :(得分:1)
最安全的选择是在执行此操作之前,将所有列名都转换为字符串(所以df[0]
-> df['0']
):
df.rename(columns={c: str(c).strip() for c in df.columns}, inplace=True)
这使用字典理解来遍历列名df.columns
,然后创建从原始列名c
到字符串版本str(c)
的映射。然后,它使用本地.strip()
字符串方法。您可以使用inplace=True
将其作为单行代码执行。
最接近原始问题的意图是:
df.columns = [col.strip() if isinstance(col, str) else col for col in df.columns]
...但是我建议不要使用它,因为数字列名可能会造成混淆(例如,如果列5位于位置3)。使用字符串名称,很明显这不是位置值。