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

求助: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 22:15:37