绘制柱状图时遇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)
错误原因
df.groupby(['sex'])['tip']返回的是GroupBy对象,不是plt.bar()所需的可迭代标签数据,matplotlib内部处理这个对象时会触发numpy数组不可哈希的错误。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
相关产品推荐
相关产品推荐

