Python使用pandas读取CSV文件报KeyError 'ums'如何修复
pandas读取CSV触发
KeyError 'ums'问题修复 报错根因
出现这个问题有两个核心原因:
- 你的CSV文件用不定数量的空白做列分隔符,列名
ums前后带有肉眼不可见的前置/后置空格,pandas读取后实际列名不是纯'ums'(可能是' ums'或'ums '),直接传入'ums'做键匹配自然会触发KeyError。 - 原绘图代码存在语法错误:
ax1.bar(dataframe1.index.dataframe1['ums'])一行把柱状图的x、y轴参数写连了,中间缺失逗号,就算KeyError修复后这行也会抛出语法异常。
修复步骤
- 读取CSV时适配空白分隔符,同时清理列名前后的隐藏空白
给read_csv传入sep=r'\s+'参数适配任意长度的空白分隔符,读取完成后用str.strip()清理所有列名的前后空白,从根源解决列名匹配失败的问题。 - 修正柱状图绘制代码的参数错误,在x轴参数(索引)和y轴参数(ums列值)之间补上逗号。
修复后完整代码
import pandas as pd import matplotlib.pyplot as plt # 读取CSV文件,适配空白分隔符,设置第一列为索引 df = pd.read_csv( r'C:\Users\User\Desktop\Dataset2.csv', index_col=0, sep=r'\s+' ) # 清理所有列名的前后空白字符 df.columns = df.columns.str.strip() print(df) # 按ums列降序排序 dataframe1 = df.sort_values('ums', ascending=False) fig = plt.figure(figsize=(20,5)) ax1 = fig.add_subplot(1,2,1) ax2 = fig.add_subplot(1,2,2) # 修复bar参数缺失逗号的语法错误 ax1.bar(dataframe1.index, dataframe1['ums']) ax1.set_xticklabels(dataframe1.index, rotation=60, horizontalalignment='right', fontsize=12) ax1.set_title('Title', fontsize=22) ax1.set_ylabel('Text') plt.show()
验证方法
如果想确认列名的隐藏空格问题,可以在读取文件后加一行代码打印列名的原始格式,就能看到带空格的真实列名:
print([repr(col) for col in df.columns])
执行后如果输出里的ums列名带引号内的空格,就说明确实是列名空白导致的KeyError。
内容的提问来源于stack exchange,提问作者mayft
相关产品推荐
相关产品推荐

