想要的功能:从列标题中删除空格,该空格对于不为字符串的列标题具有鲁棒性

时间:2018-11-28 00:04:33

标签: python pandas dataframe strip

我将数据放入pandas数据框中,通常使用

清理列标题
df.columns = df.columns.str.strip()

但是我最近遇到的数据框具有整数类型的列名,而不是字符串。当我尝试执行.str.strip()时,会引发错误。

我该如何编写一些python代码来从列名称​​中删除空格(如果它们是字符串)

我是python的新手,所以手越多越好。

谢谢

2 个答案:

答案 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)。使用字符串名称,很明显这不是位置值。