Pandas复制DataFrame行:填补缺失日期数据的简便实现方法
有两种更通用的方案,不需要手动硬编码缺失日期和对应的前序日期,后续新增缺失值也不用修改代码:
方案1:单日期对应单行数据的场景
如果你的数据每行对应一个日期,直接用日期索引+前向填充即可:
import pandas as pd # 1. 转换日期列为datetime格式并设为索引 df['date'] = pd.to_datetime(df['date']) df = df.set_index('date') # 2. 生成完整的日度日期序列,缺失值自动用前一天的数据填充 full_df = df.asfreq(freq='D', method='ffill').reset_index()
最后得到的full_df就是补全后的完整数据,无需额外拼接。
方案2:单日期对应多行数据的场景
如果你的数据每个日期下有多条不同维度(比如不同门店、不同商品)的记录,用笛卡尔积生成完整索引后分组填充即可:
import pandas as pd # 1. 转换日期列格式 df['date'] = pd.to_datetime(df['date']) # 2. 提取所有非日期维度列 dim_cols = [col for col in df.columns if col != 'date'] # 3. 生成数据覆盖范围内的所有日期 all_dates = pd.date_range(start=df['date'].min(), end=df['date'].max(), freq='D') # 4. 生成「所有日期 + 所有维度组合」的完整索引 full_index = pd.MultiIndex.from_product( [all_dates] + [df[col].unique() for col in dim_cols], names=['date'] + dim_cols ) # 5. 重新索引后按维度分组前向填充 full_df = df.set_index(['date'] + dim_cols)\ .reindex(full_index)\ .groupby(dim_cols, group_keys=False)\ .ffill()\ .reset_index()
以上两种方案都能自动识别所有非连续的缺失日期,自动用前一天的同维度数据补全,适合任意数量的缺失场景。
内容的提问来源于stack exchange,提问作者AmanArora
相关产品推荐
相关产品推荐

