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

如何在Python中为Pandas DataFrame相邻两个日期间补全带NaN的缺失行

Pandas 自动补全连续日期行的高效实现方案

实现逻辑

依托Pandas原生时间序列索引对齐能力完成补全,全程为矢量化运算,适配百万行级大表处理场景,无需逐行判断缺失、手动构造空行拼接。

分步可运行代码

首先构造匹配你给出结构的测试DataFrame:

import pandas as pd
df = pd.DataFrame(
    [['1/1/2020', '0:00', 807, 1600], 
     ['3/1/2020', '1:00', 4000, 8000]],
    columns=['Date', 'Hour', 'X', 'Y']
)

1. 规范Date列格式

Date列当前为dd/mm/yyyy格式的字符串,需转换为标准datetime类型,必须显式指定解析规则,避免月日顺序解析颠倒:

df['Date'] = pd.to_datetime(df['Date'], format='%d/%m/%Y')

2. 对齐连续日期补全缺失行

两种等价的简洁实现写法:

  • 写法1(适配自定义起止范围):
# 生成覆盖现有数据日期区间的连续日级时间轴
full_date_index = pd.date_range(start=df['Date'].min(), end=df['Date'].max(), freq='D')
# 按连续索引重排,无匹配的行自动填充NaN
df_result = df.set_index('Date').reindex(full_date_index).reset_index()
  • 写法2(更短的原生语法):
# 设置日期为索引后直接指定日频率,自动补齐区间内所有缺失日
df_result = df.set_index('Date').asfreq('D').reset_index()

输出效果

缺失的2020-01-02行自动生成,Hour、X、Y列默认填充NaN,最终表结构为:

DateHourXY
2020-01-010:00807.01600.0
2020-01-02NaNNaNNaN
2020-01-031:004000.08000.0

实用注意点

  • 大表场景下,上述操作是底层C实现的矢量化运算,运行速度远快于逐行遍历找缺失、手动拼接空行的方案
  • 若需补全超出现有数据范围的日期(比如从当月首日补到当月月末),只需调整pd.date_range的start/end参数即可,无需修改核心逻辑
  • 补全完成后,若需给Hour列设置默认填充值,直接对目标列执行fillna操作即可,不影响核心补全流程

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 08:15:01