首页 > 解决方案 > 数据框:为缺少的日期添加新行

问题描述

我有以下 pandas df,日期为索引:

              S&P500    Europe     Japan
Date                                    
2002-12-23  0.247683  0.245252  0.203916
2002-12-24  0.241855  0.237858  0.200971
2002-12-26  0.237095  0.230614  0.197621
2002-12-27  0.241104  0.250323  0.191855

我需要为每个缺失的日期添加新行(考虑到 df 的第一个日期和最后一个日期之间的日期)。对于新行,列中的值应向前填充。这是预期的输出(添加 2002-12-25):

              S&P500    Europe     Japan
Date                                    
2002-12-23  0.247683  0.245252  0.203916
2002-12-24  0.241855  0.237858  0.200971
2002-12-25  0.241855  0.237858  0.200971
2002-12-26  0.237095  0.230614  0.197621
2002-12-27  0.241104  0.250323  0.191855

我创建了第一个和最后一个日期之间所有日期的列表:

min_date=df.index.min()
max_date=df.index.max()
date_list=pd.date_range(min_date,max_date-timedelta(days=1),freq='d')

有没有办法检查“date_list”的哪些日期不在df索引中并相应地添加行?新行的列应该用 NaN 填充,以便我以后可以向前填充它们。谢谢

标签: pythonpandasdataframedate

解决方案


您可以使用.reindex+ .ffill()

min_date = df.index.min()
max_date = df.index.max()
date_list = pd.date_range(min_date, max_date, freq="D")

df = df.reindex(date_list).ffill()
print(df)

印刷:

              S&P500    Europe     Japan
2002-12-23  0.247683  0.245252  0.203916
2002-12-24  0.241855  0.237858  0.200971
2002-12-25  0.241855  0.237858  0.200971
2002-12-26  0.237095  0.230614  0.197621
2002-12-27  0.241104  0.250323  0.191855

或:使用method=参数

df = df.reindex(date_list, method="ffill")

推荐阅读