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

绘制柱状图时遇TypeError: unhashable type: 'numpy.ndarray'错误求助

问题排查:matplotlib绘制柱状图时出现TypeError: unhashable type: 'numpy.ndarray'

问题场景

使用Python的pandas和matplotlib库绘制柱状图时,运行代码触发以下错误:

TypeError: unhashable type: 'numpy.ndarray'

未显式使用numpy数组,无法定位错误原因。

原代码

import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
%matplotlib inline
df=pd.read_csv('C:/Users/madhav ji/Downloads/tips (1).csv')
#print('Number of all the countries:',len(df),'
')
#print(df.head(5),'
')
tip=df.tip
#print(tip.head(5),'
')
tip_mean=tip.mean()
#print(tip_mean,'
')
gen=df.groupby(['sex'])['tip']
#print(gen)
plt.bar(gen,tip_mean)

错误原因

  1. df.groupby(['sex'])['tip']返回的是GroupBy对象,不是plt.bar()所需的可迭代标签数据,matplotlib内部处理这个对象时会触发numpy数组不可哈希的错误。
  2. tip_mean是整个tip列的全局平均值,不是分组后的平均值,参数类型和含义完全不匹配plt.bar()的要求。

修正方案

先计算分组后的tip平均值,再提取分组标签和对应数值传入plt.bar():

修正后代码

import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

df = pd.read_csv('C:/Users/madhav ji/Downloads/tips (1).csv')
# 计算按性别分组后的tip平均值
gen_mean = df.groupby('sex')['tip'].mean()
# 绘制柱状图:x轴是性别分组,y轴是对应组的tip平均值
plt.bar(gen_mean.index, gen_mean.values)
# 添加标签让图表更清晰
plt.xlabel('性别')
plt.ylabel('平均小费')
plt.title('不同性别平均小费对比')
plt.show()

内容的提问来源于stack exchange,提问作者varun vadjikar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 21:06:24