在特定时间跨度的 pandas 数据框的日期列中包含缺失的日期

Including the missing dates in the date column of pandas dataframe for a specific timespan

我有一个时间序列数据框,其 headers 是“日期”和“值”

示例数据框:

    Date              Value
    2019-10-01      46486868.0
    2019-11-01      36092742.0
    2019-12-01      32839185.0

遗憾的是,日期列缺少一些月份。例如,数据集应该是 2001-2010 年的月度数据集,但它每年都缺少几个随机月份。

由于我正在制作时间序列模型,所以我不能缺少日期,所以我一直在尝试找出一种方法来包含相同的日期。

我尝试创建一个 pandas object 如下:

df_date = pd.date_range(start='1/1/2001', end='11/1/2010', freq='MS')    
type(df_date)

pandas.core.indexes.datetimes.DatetimeIndex

但这并没有与 pandas 数据框合并。它给出以下错误:

TypeError: Can only merge Series or DataFrame objects, a <class 'pandas.core.indexes.datetimes.DatetimeIndex'> was passed

手头的任务是通过将其与具有所有日期和ffil缺失值的另一个数据框匹配或以某种方式将缺失值包括在现有数据框。

有什么办法可以解决吗?

pd.date_range returns 一个索引对象。你可以像这样用它创建一个数据框:

df_date = pd.DataFrame({'Date':pd.date_range(start='1/1/2019', end='1/1/2020', freq='MS')    })

然后就可以合并了

df_date.merge(df, on='Date', how='left')

输出:

         Date       Value
0  2019-01-01         NaN
1  2019-02-01         NaN
2  2019-03-01         NaN
3  2019-04-01         NaN
4  2019-05-01         NaN
5  2019-06-01         NaN
6  2019-07-01         NaN
7  2019-08-01         NaN
8  2019-09-01         NaN
9  2019-10-01  46486868.0
10 2019-11-01  36092742.0
11 2019-12-01  32839185.0
12 2020-01-01         NaN

Date 设置为索引并用 df_date 重新索引:

df_date = pd.date_range(start='1/1/2019', end='11/1/2020', freq='MS')
df = df.set_index('Date').reindex(df_date)

输出:

>>> df
                 Value
2019-01-01         NaN
2019-02-01         NaN
2019-03-01         NaN
2019-04-01         NaN
2019-05-01         NaN
2019-06-01         NaN
2019-07-01         NaN
2019-08-01         NaN
2019-09-01         NaN
2019-10-01  46486868.0
2019-11-01  36092742.0
2019-12-01  32839185.0
2020-01-01         NaN
2020-02-01         NaN
2020-03-01         NaN
2020-04-01         NaN
2020-05-01         NaN
2020-06-01         NaN
2020-07-01         NaN
2020-08-01         NaN
2020-09-01         NaN
2020-10-01         NaN
2020-11-01         NaN