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

已移除left_error列NaN值,为何Plotly热力图仍显示NaN?

问题描述

我编写了如下代码:

print(abs(data.left_error))
print(data['left_error'].isna().sum())

# 移除left_error列含NaN值的行
left_no_nan = data.dropna(subset=['left_error'])
print(abs(left_no_nan.left_error))
print(left_no_nan['left_error'].isna().sum())


fig1 = go.Figure(data=[
    go.Heatmap(
        z=abs(left_no_nan.left_error),
        x=left_no_nan.somedata_left,
        y=left_no_nan['velocity'],
        colorscale='Viridis'
    )])

原数据data的left_error列存在部分NaN值,打印输出显示:

0 0.442834
1 0.404161
2 0.361559
3 0.319925
4 0.273510
...
25405 NaN
25406 NaN
25407 NaN
25408 NaN
25409 NaN
Name: left_error, Length: 25410, dtype: float64
10797
0 0.442834
1 0.404161
2 0.361559
3 0.319925
4 0.273510
...
25322 0.171343
25323 0.347305
25324 0.279475
25325 0.224612
25326 0.299578
Name: left_error, Length: 14613, dtype: float64
0

可见处理后的left_no_nan中left_error列已无NaN值,但运行脚本后,绘制的热力图在hover时仍显示大量NaN值,请问这是什么原因?

原因分析与解决方案
  • 核心原因:Plotly热力图不是直接按行匹配x、y、z的对应关系,而是会基于x和y的所有唯一值构建完整网格。如果某个x-y组合在你的数据集中没有对应记录,热力图就会在该位置填充NaN,hover时就会显示出来。另外也需要排查somedata_left或velocity列本身是否存在NaN值——即使left_error已清理,这两列的NaN也会导致hover显示异常。
  • 解决办法:
    1. 先同步清理x、y对应列的NaN值:
      # 同时移除left_error、somedata_left、velocity列含NaN的行
      left_no_nan = data.dropna(subset=['left_error', 'somedata_left', 'velocity'])
      
    2. 若为网格缺失导致的NaN,可按需选择:
      • 开启插值填充,让热力图自动补全缺失值:
        go.Heatmap(
            z=abs(left_no_nan.left_error),
            x=left_no_nan.somedata_left,
            y=left_no_nan['velocity'],
            colorscale='Viridis',
            zsmooth='best'  # 自动插值填充缺失网格
        )
        
      • 预先对数据做聚合处理,比如用均值填充相同x-y组合的缺失值后再绘图。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 16:03:30