使用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
相关产品推荐
相关产品推荐

