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

Seaborn热力图结合CSV报错:无法转字符串为浮点数、无法重塑

解决Seaborn Heatmap可视化商店商品数据的两个问题

问题1:ValueError: could not convert string to float: 'Misc - Item'

首先你代码里有个明显笔误:定义了data = pd.read_csv(...),但后面调用了未定义的dfraw,先改成df = data[list_string]再说。但核心问题是:Seaborn的heatmap只接受数值型二维数据,你的DataFrame里全是文本列(Item和Store都是字符串),直接传入肯定会报错,因为heatmap无法把文本转换成数值计算。

正确做法是先把商品-商店的对应关系转换成数值型交叉表,比如统计每个商品在各商店的出现次数:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 读取数据并修正笔误
data = pd.read_csv('OOR_excerpt.csv', encoding='cp1252')
# 生成交叉表,统计每个Item在每个Store的出现频次
cross_tab = pd.crosstab(data['Item'], data['Store'])
# 绘制热力图,annot=True显示具体数值
sns.heatmap(cross_tab, annot=True, cmap='viridis')
plt.show()

问题2:ValueError: Index contains duplicate entries, cannot reshape

pivot()方法要求**(行索引, 列名)的组合必须唯一**,如果你的数据里存在同一个商品在同一家商店出现多次(比如重复购买同一件商品),pivot()就无法处理重复的组合,因为它不知道如何聚合这些重复数据。

解决方法是用pivot_table()替代pivot(),指定聚合函数来处理重复条目,比如统计次数:

# 用pivot_table处理重复条目,aggfunc='count'统计出现次数,fill_value=0填充空值
heatmap_df = data.pivot_table(index='Item', columns='Store', values='Item', aggfunc='count', fill_value=0)
sns.heatmap(heatmap_df, annot=True)
plt.show()

如果你的数据有购买数量列(比如Quantity),可以把values改成Quantity,aggfunc改成sum来统计总购买量。

另外提一句:清理浏览器缓存和这些报错完全无关,问题本质是对Seaborn heatmap的输入要求、pivot与pivot_table的区别理解不到位。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 09:05:32