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

如何为DataFrame特定列补全缺失月份并填充NA值?

Pandas DataFrame 指定列补全缺失月份实现

需求说明

现有数据集starttime列存储日期数据,样例如下:

starttime
1 2016-02-26
2 2016-04-12
3 2016-04-22
4 2016-08-04
5 2016-09-15
6 2016-09-16
7 2016-09-20
8 2016-09-22
9 2017-06-02

需要实现的转换规则:

  • 基于现有日期的时间跨度,补全所有缺失的月份,缺失月份位置插入对应月份1号的日期
  • 例如2016-02-26与2016-04-12之间插入2016-03-01,2016-04-22之后插入2016-05-01
  • 补入的新行除starttime列外,其余字段统一填充为NA

实现代码

import pandas as pd

# 转换starttime列为datetime类型,已完成格式转换可跳过该步骤
df['starttime'] = pd.to_datetime(df['starttime'])

# 确定补全的时间范围:最早日期所在月月初 到 最晚日期所在月月初
range_start = df['starttime'].min().to_period('M').to_timestamp()
range_end = df['starttime'].max().to_period('M').to_timestamp()

# 生成步长为1个月的连续月初时间序列
full_month_seq = pd.date_range(start=range_start, end=range_end, freq='MS')

# 给原表添加辅助列,标记每条记录所属月份的月初值,用于后续匹配
df['month_flag'] = df['starttime'].to_period('M').to_timestamp()

# 用连续月份序列做左连接,自动关联原表已有数据,缺失月份的其余字段自动填充为NA
base_df = pd.DataFrame({'month_flag': full_month_seq})
final_df = base_df.merge(df, on='month_flag', how='left')

# 补全缺失行的starttime为当月1号,删除辅助列重置索引
final_df['starttime'] = final_df.apply(
    lambda row: row['month_flag'] if pd.isna(row['starttime']) else row['starttime'],
    axis=1
)
final_df = final_df.drop(columns='month_flag').reset_index(drop=True)

效果说明

  • 代码执行后会自动覆盖原时间跨度内所有月份,缺失月份自动插入当月1号的记录
  • 补入记录的非日期列默认保留NaN,即需求要求的NA值
  • 如果需要调整日期输出格式,可在最后追加日期格式化代码,例如final_df['starttime'] = final_df['starttime'].dt.strftime('%Y-%m-%d')可将日期转为YYYY-MM-DD格式的字符串

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 12:12:19