已移除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显示异常。 - 解决办法:
- 先同步清理
x、y对应列的NaN值:# 同时移除left_error、somedata_left、velocity列含NaN的行 left_no_nan = data.dropna(subset=['left_error', 'somedata_left', 'velocity']) - 若为网格缺失导致的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
相关产品推荐
相关产品推荐

