求助:TypeError: unhashable type: 'numpy.ndarray'错误解决方法
解决plt.plot触发TypeError的问题
错误原因
出现TypeError: unhashable type: 'numpy.ndarray',大概率是你的DataFrame列数据类型异常(比如是object类型而非数值类型),或者直接传入整个二维DataFrame时,内部解析遇到了无法哈希的数组类型数据。
具体修复步骤
1. 统一转换为数值类型
处理完缺失值后,先把所有需要绘图的列转换为数值类型,避免非数值类型导致解析错误:
# 转换所有列为数值类型,无法转换的内容会被设为NaN house1 = house1.apply(pd.to_numeric, errors='coerce') # 再次填充转换产生的新NaN(可根据需求选择ffill、均值等方式) house1.fillna(method='ffill', inplace=True)
2. 优化索引类型(可选但推荐)
因为你的索引是tstp时间戳,转换为datetime类型能让时间序列绘图更合理,也避免索引类型异常:
house1.index = pd.to_datetime(house1.index)
3. 正确调用绘图方法
- 若要绘制所有列,直接用DataFrame自带的plot方法(比plt.plot更适配Pandas数据结构):
import matplotlib.pyplot as plt house1.plot(ax=plt.gca(), label="Original") plt.legend() plt.show()
- 若只需绘制某一列,明确指定列名即可:
plt.plot(house1['目标列名'], label="Original") plt.legend() plt.show()
完整修复后的代码示例
import pandas as pd import numpy as np import matplotlib.pyplot as plt house1 = pd.read_csv("House1.csv") house1.set_index('tstp', drop=True, inplace=True) # 替换字符串"Null"为标准NaN house1.replace('Null', np.nan, inplace=True) # 缺失值处理(选择适合你的方式) house1.dropna(axis=0, inplace=True) # 或 house1.fillna(method='ffill', inplace=True) # 转换所有列为数值类型 house1 = house1.apply(pd.to_numeric, errors='coerce') # 处理转换产生的新缺失值 house1.fillna(method='ffill', inplace=True) # 转换索引为时间类型 house1.index = pd.to_datetime(house1.index) # 绘制所有列 house1.plot(ax=plt.gca(), title="House1 Data") # 若绘制单列,替换为下方代码 # plt.plot(house1['你的列名'], label="Original") plt.legend() plt.show()
内容的提问来源于stack exchange,提问作者daewon_stackoverflow
相关产品推荐
相关产品推荐

