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

使用Pandas填充每日时间序列时遗漏00:00时刻缺失值的问题

解决Pandas时间序列补全及时区匹配问题

你的问题核心在于时区不匹配以及缺失了起始时间点的生成逻辑,下面一步步帮你解决:

问题分析

  1. 你之前生成的time_range是不带时区的naive datetime,而原始数据的time列是带UTC时区的aware datetime,两者无法匹配,导致reindex后所有值变为NaN。
  2. resample默认从现有数据的最早时间(00:10)开始生成频率序列,不会自动补全更早的00:00时间点。

完整解决方案

步骤1:确保时间列是带时区的datetime类型

首先确认你的time列已经被正确解析为带UTC时区的datetime:

data['time'] = pd.to_datetime(data['time'], utc=True)

步骤2:生成带时区的完整时间范围

手动生成包含2019-05-08 00:00:00+00:00到2019-05-08 23:50:00+00:00的10分钟间隔序列,必须指定时区为UTC:

start = pd.Timestamp('2019-05-08 00:00:00', tz='UTC')
end = pd.Timestamp('2019-05-08 23:50:00', tz='UTC')
full_time_range = pd.date_range(start=start, end=end, freq='10T')

步骤3:重新索引并填充缺失值

设置time为索引后,用完整时间范围重新索引,再针对不同列做填充:

# 设置索引并重新对齐到完整时间序列
data_full = data.set_index('time').reindex(full_time_range)

# 填充站点信息(station_id和station_name是固定值,双向填充确保起始行也有值)
data_full[['station_id', 'station_name']] = data_full[['station_id', 'station_name']].ffill().bfill()

# 填充数值列:用前向填充,00:00会沿用00:10的数值,后续缺失值也会继承最近的有效值
data_full['value'] = data_full['value'].ffill()

# 可选:重置索引,把time变回普通列
data_full = data_full.reset_index().rename(columns={'index': 'time'})

验证结果

执行后你会看到2019-05-08 00:00:00+00:00的行被补全,station_id、station_name保持和原数据一致,value填充为00:10的11,后续缺失的时间点也会按10分钟间隔补全并填充有效值。

简化版代码

如果你的站点信息全程不变,也可以用更简洁的方式:

data['time'] = pd.to_datetime(data['time'], utc=True)
full_time_range = pd.date_range('2019-05-08 00:00:00', '2019-05-08 23:50:00', freq='10T', tz='UTC')
data_full = data.set_index('time').reindex(full_time_range).assign(
    station_id=data['station_id'].iloc[0],
    station_name=data['station_name'].iloc[0]
).ffill()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:20:10