绘制pandas pivot_table时触发KeyError问题求助
解决Pivot Table绘图时的KeyError问题
咱们先梳理下你的场景:你已经成功基于DataFrame构建了按州和年度分组的贷款金额透视表,但在尝试绘制这个透视表时触发了KeyError。
问题根源分析
从你给出的透视表输出能看到,issue_year列的标签是浮点数类型(比如2007.0、2008.0),如果你的绘图代码里用了整数形式的年份(比如2007)作为索引/列名去访问数据,就会触发KeyError——毕竟浮点数和整数在Python里是完全不同的键。
另外你当前创建透视表的语法有点冗余,也可能间接导致后续的索引/列名匹配问题。
解决方案步骤
1. 优化透视表创建逻辑(推荐)
先把年份列转为整数类型,同时简化pivot_table的参数传递,让逻辑更清晰:
# 直接把issue_year转为整数类型,避免后续浮点数列名问题 data['issue_year'] = pd.to_datetime(data['issue_d']).dt.year.astype(int) # 创建透视表,明确指定聚合字段和方式 data_table_years = data.pivot_table( values='loan_amnt', index='addr_state', columns='issue_year', aggfunc='mean' # 这里可以明确你的聚合逻辑,默认也是均值,写出来更直观 )
这么处理后,透视表的列名会是整数(2007、2008),和我们日常使用的年份格式一致,能避免类型不匹配的问题。
2. 修复已生成的透视表列类型
如果不想重新生成透视表,也可以直接修改现有表的列名类型:
# 将浮点数列名转换为整数 data_table_years.columns = data_table_years.columns.astype(int)
3. 确保绘图代码的键匹配
修改完列类型后,用常规的绘图代码就能正常运行了,举两个示例:
import matplotlib.pyplot as plt # 绘制单个州的年度贷款金额变化 data_table_years.loc['AK'].plot(kind='line') plt.title('AK州年度平均贷款金额变化') plt.xlabel('年份') plt.ylabel('平均贷款金额') plt.show() # 绘制所有州的年度对比 data_table_years.T.plot(kind='line', figsize=(12,6)) plt.title('各州年度平均贷款金额对比') plt.xlabel('年份') plt.ylabel('平均贷款金额') plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left') plt.show()
额外排查点
如果还是报错,可以检查这两点:
- 绘图代码里有没有写错列名(比如年份拼写错误、多打了符号)
- 透视表里是否有全为空的年份列,可以用
data_table_years.dropna(axis=1, how='all')删除这类列,避免绘图时的异常
内容的提问来源于stack exchange,提问作者abolotnov
相关产品推荐
相关产品推荐

