You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

绘制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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:59:23