如何从 Pandas DataFrame 标头中去除空格?
- 2025-03-13 09:08:00
- admin 原创
- 77
问题描述:
我正在解析 Excel 文件中的数据,该文件的某些列标题中有多余的空格。
当我使用 检查结果数据框的列时,df.columns
我看到:
Index(['Year', 'Month ', 'Value'])
^
# Note the unwanted trailing space on 'Month '
因此,我不能这样做:
df["Month"]
因为它会告诉我没有找到该列,因为我要求的是“月份”,而不是“月份”。
那么,我的问题是如何从列标题中去除不需要的空白?
解决方案 1:
您可以为该rename
方法提供函数。该str.strip()
方法应该执行您想要的操作:
In [5]: df
Out[5]:
Year Month Value
0 1 2 3
[1 rows x 3 columns]
In [6]: df.rename(columns=lambda x: x.strip())
Out[6]:
Year Month Value
0 1 2 3
[1 rows x 3 columns]
注意:这将返回一个DataFrame
对象,并在屏幕上显示为输出,但更改实际上并未设置在您的列上。要进行更改,请在方法链中使用它或重新分配df
变量:
df = df.rename(columns=lambda x: x.strip())
解决方案 2:
从0.16.1 版本开始,您只需调用.str.strip
以下列即可:
df.columns = df.columns.str.strip()
以下是一个小例子:
In [5]:
df = pd.DataFrame(columns=['Year', 'Month ', 'Value'])
print(df.columns.tolist())
df.columns = df.columns.str.strip()
df.columns.tolist()
['Year', 'Month ', 'Value']
Out[5]:
['Year', 'Month', 'Value']
时间安排
In[26]:
df = pd.DataFrame(columns=[' year', ' month ', ' day', ' asdas ', ' asdas', 'as ', ' sa', ' asdas '])
df
Out[26]:
Empty DataFrame
Columns: [ year, month , day, asdas , asdas, as , sa, asdas ]
%timeit df.rename(columns=lambda x: x.strip())
%timeit df.columns.str.strip()
1000 loops, best of 3: 293 µs per loop
10000 loops, best of 3: 143 µs per loop
所以str.strip
速度快了 2 倍,我希望它能更好地适应更大的 dfs
解决方案 3:
如果使用 CSV 格式从 Excel 导出并读取为 Pandas DataFrame,则可以指定:
skipinitialspace=True
当调用时pd.read_csv
。
来自文档:
skipinitialspace : bool,默认为 False
Skip spaces after delimiter.
解决方案 4:
如果您正在寻找一种牢不可破的方法,我建议:
data_frame.rename(columns=lambda x: x.strip() if isinstance(x, str) else x, inplace=True)
解决方案 5:
实际上可以这样做
df.rename(str.strip, axis = 'columns')
这在此处的Pandas 文档中有显示
。
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD