使用Pandas导入Excel数据绘图时遇unhashable type: 'numpy.ndarray'错误求助
问题:导入Excel数据制作饼图时触发
TypeError: unhashable type: 'numpy.ndarray' 你尝试从Excel导入数据制作饼图,但运行代码后遇到了类型错误,先梳理下你的代码和报错信息:
你的代码
import pandas as pd import matplotlib.pyplot as plt basedatos = pd.read_excel(r'C:\Users\CFK\Documents\Python example\Data Example.xlsx',sheet_name='results') print(basedatos) fig, ax = plt.subplots() ax.plot(basedatos) plt.show()
报错信息
TypeError: unhashable type: 'numpy.ndarray'
详细错误栈:
File "C:\Users\CFK\anaconda3\lib\site-packages\matplotlib\category.py", line 116, in default_units axis.set_units(UnitData(data)) File "C:\Users\CFK\anaconda3\lib\site-packages\matplotlib\category.py", line 192, in __init__ self.update(data) File "C:\Users\CFK\anaconda3\lib\site-packages\matplotlib\category.py", line 225, in update for val in OrderedDict.fromkeys(data): TypeError: unhashable type: 'numpy.ndarray' QSocketNotifier: Multiple socket notifiers for same socket 2544 and type Read
问题分析与解决方法
1. 核心错误原因
你踩了两个关键坑:
- 用错了绘图函数:你目标是做饼图,但调用了
ax.plot()——这个函数是用来画折线图的,完全不匹配饼图的需求。 - 数据传递方式错误:直接把整个DataFrame传给
ax.plot()时,matplotlib会尝试解析每一列的数据,如果你的DataFrame里包含numpy数组类型的列(或者列结构不符合折线图要求),就会触发"unhashable type: 'numpy.ndarray'"错误——因为matplotlib处理类别数据时,要求数据是可哈希的类型(比如字符串、数字),而numpy数组是不可哈希的。
2. 正确的解决步骤
第一步:先确认数据结构
在绘图前,先打印数据的前几行和基本信息,明确哪一列是类别、哪一列是对应数值:
print(basedatos.head()) # 查看数据前5行 print(basedatos.info()) # 查看各列的数据类型
第二步:用正确的饼图函数绘制
饼图需要一维的数值数组和对应的类别标签,使用ax.pie()函数来实现。假设你的DataFrame有两列:比如叫Category的类别列和叫Value的数值列,修改后的代码如下:
import pandas as pd import matplotlib.pyplot as plt basedatos = pd.read_excel(r'C:\Users\CFK\Documents\Python example\Data Example.xlsx',sheet_name='results') print(basedatos.head()) fig, ax = plt.subplots() # 替换成你实际的列名 ax.pie(basedatos['Value'], labels=basedatos['Category'], autopct='%1.1f%%') # 添加标题 ax.set_title('我的饼图') # 保证饼图是正圆形 ax.axis('equal') plt.show()
3. 额外注意事项
- 如果数据里有空值或者非数值类型的数值列,先做清洗:比如用
basedatos.dropna()删除空值,用pd.to_numeric()转换数值类型。 - 如果你的DataFrame是单列数据,也可以用
basedatos.iloc[:, 0]获取数值,标签可以自己手动指定。
内容的提问来源于stack exchange,提问作者Ilka Noemi Bustamante Lastra
相关产品推荐
相关产品推荐

