如何处理时间序列中的大量NaN值以正常绘制分组可视化图表
解决方案
核心逻辑是不全局处理ex的NaN值,而是对齐你原本按日期分组的绘图逻辑,对单个设备的子数据框按日期做二次拆分后分别处理:
- 先保留
ex里的3类必要列即可:时间列/时间索引、功耗观测列、日期标签列,剔除其他无关列减少冗余 - 对
ex按日期列做二次分组,逐日期块处理NaN并绘图,示例代码如下:
# 提前定义日期和颜色的映射关系,保证所有设备的同日期配色统一 date_color_map = { "2024-01-01": "#1f77b4", "2024-01-02": "#ff7f0e", # 补充剩余4个日期的配色即可 } # 二次分组处理单设备的不同日期数据 for date, date_sub_df in ex.groupby("你的日期列名"): # 仅过滤当前日期块内功耗列为空的行,不跨日期处理 valid_df = date_sub_df.dropna(subset=["你的功耗列名"]) # 绘制当前日期的曲线,使用统一的日期配色 plt.plot(valid_df["你的时间列名"], valid_df["你的功耗列名"], color=date_color_map[date], label=date)
- 如果你的时间已经设为
ex的索引,把代码里的valid_df["你的时间列名"]替换为valid_df.index即可。
不要使用全局向前填充/线性插值的方式处理
ex的NaN,否则会把不同日期之间的空白段也填充为虚假数据,导致不同日期的曲线错误连在一起,和你原本按日期分组的绘图效果不一致。
内容的提问来源于stack exchange,提问作者stats_b
相关产品推荐
相关产品推荐

