如何为DataFrame缺失日期单元格赋值(基于当月首日)
解决DataFrame日期列缺失值填充问题
核心思路
先从日期列的非空值中提取目标月份信息,生成当月首日(或直接取列中任意有效同月份日期),再批量填充所有缺失单元格。
具体实现步骤
- 转换日期列格式
确保日期列为datetime类型,方便后续处理:
import pandas as pd df['日期'] = pd.to_datetime(df['日期'], errors='coerce')
- 获取目标月份基准日期
由于每个文件仅含单月数据,且必有非空日期,直接提取第一个非空日期的年月,生成当月首日:
# 提取第一个非空日期的年月周期 target_month = df['日期'].dropna().iloc[0].to_period('M') # 转为当月首日的datetime对象 month_first_day = target_month.to_timestamp()
若不需要首日,只想用列中已有的任意同月份日期,可直接取第一个非空值:
base_date = df['日期'].dropna().iloc[0]
- 填充缺失值
用基准日期批量填充所有空值:
# 填充当月首日 df['日期'] = df['日期'].fillna(month_first_day) # 或填充列中已有同月份日期 # df['日期'] = df['日期'].fillna(base_date)
示例验证
假设原始DataFrame如下:
data = {'日期': [pd.NA, '2023-08-12', pd.NA, '2023-08-25'], '销售额': [100, 200, 150, 300]} df = pd.DataFrame(data)
处理后日期列的空值会被填充为2023-08-01,非空值保持不变。
为什么fillna(method='ffill')不适用?
ffill是向前填充逻辑,仅能从已填充的前序单元格取值。如果首行日期为空,后续单元格没有可继承的有效值,自然无法完成填充。而先提取基准日期再批量填充的方式,不受空值位置影响,能覆盖所有缺失场景。
内容的提问来源于stack exchange,提问作者Waleed Mahmood
相关产品推荐
相关产品推荐

