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

时间序列数据:使用resample.mean()出现缺失值的原因咨询

重采样后出现大量缺失值的原因及解决办法

你遇到的这个情况其实很典型,先给你拆解下核心原因:那些显示NaN的5分钟时间区间,原始数据里根本没有任何对应的数据记录。

resample()方法的默认行为是生成一个连续的时间索引,覆盖你原始数据集的整个时间范围——不管某个5分钟区间里有没有数据,它都会把这个时间戳保留下来。当区间内没有数据时,均值聚合自然没有可计算的样本,结果就会是NaN。从你给出的缺失值区间(2021-07-26 17:00到2021-08-09 07:55)来看,这段时间你的原始数据应该是完全断档的,所以重采样后全是缺失值。

针对这个问题的几种解决办法:

  • 过滤空区间(最常用)
    如果这些没有数据的区间对你的分析没用,直接用dropna()剔除即可:
PrimaryBookF = PrimaryBookD.resample('5T', on='Time').mean().dropna()
PrimaryBookG = PrimaryBookF.reset_index()

处理后结果里只会保留有原始数据支撑的5分钟区间,不会再有NaN。

  • 填充缺失值(需保留连续时间轴时用)
    要是你需要维持完整的时间序列,根据业务场景选择合适的填充方式:

    # 用前一个有效值填充(适合连续型数据,比如金融行情)
    PrimaryBookF = PrimaryBookD.resample('5T', on='Time').mean().ffill()
    # 用0填充(适合计数类数据,无数据时视为0)
    PrimaryBookF = PrimaryBookD.resample('5T', on='Time').mean().fillna(0)
    # 线性插值填充(适合数据平滑变化的场景)
    PrimaryBookF = PrimaryBookD.resample('5T', on='Time').mean().interpolate(method='linear')
    
  • 先确认原始数据的时间分布
    你可以先排查下原始数据的时间断档情况,明确哪些区间真的没有数据:

# 查看原始数据的时间起止范围
print(PrimaryBookD['Time'].min(), PrimaryBookD['Time'].max())
# 统计每个5分钟区间的数据量,找出空区间
empty_intervals = PrimaryBookD.resample('5T', on='Time').count()
print(empty_intervals[empty_intervals['A'] == 0])

这样能帮你更清晰地判断是数据本身的断档问题,还是其他异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 03:22:36