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

使用两列数据绘制柱状图时出现TypeError: unhashable type: 'numpy.ndarray'错误求助

解决柱状图绘制时的TypeError: unhashable type: 'numpy.ndarray'问题

我来帮你拆解下问题根源,以及给出具体的修复方案:

问题出在哪?

你的错误核心有两个:

  1. y变量的类型错误:y = dengue_by_region['Region']并没有提取出实际的区域名称列表,它返回的是一个SeriesGroupBy对象(不是可直接用于绘图的数组/Series)。当matplotlib尝试解析这个对象时,内部会碰到不可哈希的numpy数组类型,从而抛出那个错误。
  2. plt.bar的参数逻辑混淆:plt.bar()默认参数顺序是(x, height),也就是X轴放类别、Y轴放对应数值;如果想把区域放在Y轴、病例数放在X轴,应该用横向柱状图plt.barh()。

修复后的完整代码

步骤1:正确聚合数据

先把分组求和的结果转换成一个包含Region和Dengue_Cases列的DataFrame,方便提取绘图字段:

# 分组求和并重置索引,让Region从索引变成普通列
dengue_summary = ph_dengue_cases2016_2020.groupby('Region')['Dengue_Cases'].sum().reset_index()

步骤2:绘制你想要的横向柱状图(区域在Y轴,病例数在X轴)

import matplotlib.pyplot as plt

# 横向柱状图:Y轴是区域,X轴是总病例数
plt.barh(dengue_summary['Region'], dengue_summary['Dengue_Cases'])
plt.xlabel('Total Dengue Cases')
plt.ylabel('Region')
plt.title('Total Dengue Cases by Region (2016-2020)')
plt.show()

如果想要垂直柱状图(区域在X轴,病例数在Y轴),可以用这段代码:

plt.bar(dengue_summary['Region'], dengue_summary['Dengue_Cases'])
plt.xlabel('Region')
plt.ylabel('Total Dengue Cases')
plt.title('Total Dengue Cases by Region (2016-2020)')
# 旋转X轴标签避免名称重叠
plt.xticks(rotation=45, ha='right')
plt.show()

补充说明

你之前的dengue_by_region = ph_dengue_cases2016_2020.groupby('Region')只是创建了一个分组规则对象,并没有实际生成计算结果。而通过.reset_index(),我们把分组后的索引(也就是Region)转换成了普通列,这样就能直接提取出可用于绘图的标准化数据了。

内容的提问来源于stack exchange,提问作者Muhammad Ali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 14:07:44