需要:从列 headers 中删除空格的函数,该函数对列 headers 不是字符串很稳健

Wanted: function to remove whitespace from column headers that is robust to column headers not being strings

我将我的数据放入 pandas 数据帧,并且通常用

清理我的列 headers
df.columns = df.columns.str.strip()

但是我最近遇到了一个数据框,它有 integer 类型的列名,而不是字符串。当我尝试执行 .str.strip() 时,它会抛出错误。

如果它们是字符串。

,我将如何编写一些 python 代码从列名称中去除空格

我是新手python,手握得越多越好

谢谢

您可以使用列表理解,这在使用 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')

最安全的选择是在执行此操作之前将所有列名转换为字符串(因此 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)。加上字符串名称,很明显这不是一个位置值。