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

使用Seaborn绘制热力图时出现ValueError: could not convert string to float错误的求助

解决Seaborn Heatmap绘制时的ValueError: could not convert string to float问题

嘿,我来帮你搞定这个报错!

问题根源

Seaborn的heatmap()函数要求传入的数据集是纯数值型的二维结构(比如数值矩阵、只包含数值列的DataFrame)。但你现在直接把包含字符串列(比如STATION列里的'125 ST')的整个DataFrame传进去了,函数会尝试把所有列转换为数值来计算热力图,碰到字符串自然就抛出ValueError了。

解决方案

核心思路是先把你的数据转换成「行/列为分类标签、单元格为数值」的透视表结构,让热力图只处理数值部分:

步骤1:转换数据为透视表

假设你的原始DataFrame包含STATION(站点名称)、TIME(时间)、TRAFFIC(交通量数值)这三列,先通过透视表把数据整理成合适的格式:

# 生成透视表:行是时间,列是站点,值是对应时段的交通量
pivot_df = top_5_stations_hourly_total_traffic_by_time.pivot(
    index='TIME', 
    columns='STATION', 
    values='TRAFFIC'  # 这里替换成你的实际数值列名称
)

# 如果存在缺失值,填充为0(可选,避免热力图绘制出错)
pivot_df = pivot_df.fillna(0)

步骤2:用整理好的透视表绘制热力图

现在pivot_df的行是TIME、列是STATION,所有单元格都是数值,就可以正常绘制热力图了:

import matplotlib.pyplot as plt
import seaborn as sns

plt.figure(figsize=(10,10))
g = sns.heatmap(
    pivot_df, 
    square=True, 
    cbar_kws={'fraction' : 0.01}, 
    cmap='OrRd', 
    linewidth=1 
)
# 设置轴标签的旋转和对齐
g.set_xticklabels(pivot_df.columns, rotation=45, horizontalalignment='right')
g.set_yticklabels(pivot_df.index, rotation=45, horizontalalignment='right')

plt.show()

额外提醒

如果你的原始DataFrame已经是「行/列是标签、其余为数值」的结构,只是不小心把标签列留在了数据里,那直接提取数值部分即可,比如:

# 筛选出所有数值型列
numeric_df = top_5_stations_hourly_total_traffic_by_time.select_dtypes(include=['number'])
# 再用numeric_df绘制热力图即可

内容的提问来源于stack exchange,提问作者Ugur Selim Ozen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 23:49:09