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

使用groupby().sum()处理DataFrame后绘制带标签饼图报错解决

解决分组后matplotlib饼图标签的KeyError问题

嘿,刚接触Python/pandas/matplotlib完全不用慌,咱们来一步步搞定这个问题~

首先得搞清楚你遇到的核心问题:当你用groupby(by=sorted2017["Traitement"]).sum()分组求和后,"Traitement"这一列其实变成了DataFrame的索引,而不是普通的数据列。这就是为什么你直接用repartition["Traitement"]会报KeyError——这个名称不在列列表里,而是在索引上;用iloc的话,因为索引和数据列的长度匹配逻辑不一样,所以会报长度不匹配的ValueError。

给你两种简单的解决办法,选哪种都可以:

方法1:分组时直接保留"Traitement"为列

在groupby的时候加上as_index=False参数,这样分组键就会保留成普通列,而不是变成索引:

repartition = sorted2017.groupby(by="Traitement", as_index=False).sum()

之后你原来写的饼图代码就能正常运行了:

plt.pie(repartition["Prix"], labels=repartition["Traitement"])
plt.show()

方法2:把已生成的DataFrame索引转为列/直接用索引当标签

如果你已经生成了repartition不想重新分组,也可以直接操作索引:

  • 直接用索引作为饼图标签:
plt.pie(repartition["Prix"], labels=repartition.index)
plt.show()
  • 或者把索引重置成普通列(之后就能用列名访问了):
repartition = repartition.reset_index()
plt.pie(repartition["Prix"], labels=repartition["Traitement"])
plt.show()

小提示:以后遇到类似的DataFrame结构问题,可以用repartition.info()或者print(repartition.columns)查看列名,用print(repartition.index)查看索引,就能快速定位问题啦~

内容的提问来源于stack exchange,提问作者Véronique Lamontagne

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:41:01