Pandas如何补全datetime列缺失日期并填充前序最后一个有效值
pandas 补全缺失日期并以前置有效值填充实现方案
核心逻辑基于pandas原生向量化接口实现,无逐行循环开销,9000行规模数据处理耗时在毫秒级,可自动适配多段日期缺失场景。
实现步骤
- 将
dd/mm/yyyy格式的日期列转换为pandas标准datetime类型,指定dayfirst=True避免日期解析错位 - 将日期列设为索引,按天粒度重采样,自动生成从数据集最小日期到最大日期的连续时间序列,缺失日期的行默认填充为空值
- 对值列执行前向填充(
ffill),所有缺失日期的取值自动继承该缺失段前最后一个有效值,完全匹配需求
完整代码示例
import pandas as pd # -------------------------- # 示例数据构造(替换为你的实际数据即可) # -------------------------- df = pd.DataFrame({ 'date': ['01/01/2000', '02/01/2000', '03/01/2000', '06/01/2000'], 'value': ['a', 'b', 'c', 'd'] }) # -------------------------- # 核心处理逻辑 # -------------------------- # 日期格式转换 df['date'] = pd.to_datetime(df['date'], dayfirst=True) # 按天重采样补全缺失日期 df = df.set_index('date').resample('D').asfreq() # 前向填充值列 df['value'] = df['value'].ffill() # 可选:将日期从索引还原为普通列 df = df.reset_index()
处理结果
处理后数据完全符合预期:
| date | value |
|---|---|
| 2000-01-01 | a |
| 2000-01-02 | b |
| 2000-01-03 | c |
| 2000-01-04 | c |
| 2000-01-05 | c |
| 2000-01-06 | d |
注意事项
- 如果原始数据存在重复日期,先执行去重逻辑再重采样:
df = df.drop_duplicates(subset='date', keep='last'),避免重采样报错 - 如果数据集中存在除
value外不需要填充的列,不要全局调用填充方法,仅对需要的列单独执行ffill即可 - 如果需要补全的日期粒度不是天,只需要修改
resample的参数,比如按月补全传'M'、按小时补全传'H'即可
内容的提问来源于stack exchange,提问作者Gabriel Tkacz
相关产品推荐
相关产品推荐

