由date_range 和offsets.MonthBegin 和offsets.MonthEnd 创建所有日期时间:
print (df)
date col
0 2019-11-30 1
1 2019-12-01 4
2 2019-12-02 7
3 2019-12-03 6
4 2019-12-04 2
df['date'] = pd.to_datetime(df['date'])
rng = pd.date_range(df['date'].min() - pd.offsets.MonthBegin(),
df['date'].max() + pd.offsets.MonthEnd(), name='date')
print (rng)
DatetimeIndex(['2019-11-01', '2019-11-02', '2019-11-03', '2019-11-04',
'2019-11-05', '2019-11-06', '2019-11-07', '2019-11-08',
'2019-11-09', '2019-11-10', '2019-11-11', '2019-11-12',
'2019-11-13', '2019-11-14', '2019-11-15', '2019-11-16',
'2019-11-17', '2019-11-18', '2019-11-19', '2019-11-20',
'2019-11-21', '2019-11-22', '2019-11-23', '2019-11-24',
'2019-11-25', '2019-11-26', '2019-11-27', '2019-11-28',
'2019-11-29', '2019-11-30', '2019-12-01', '2019-12-02',
'2019-12-03', '2019-12-04', '2019-12-05', '2019-12-06',
'2019-12-07', '2019-12-08', '2019-12-09', '2019-12-10',
'2019-12-11', '2019-12-12', '2019-12-13', '2019-12-14',
'2019-12-15', '2019-12-16', '2019-12-17', '2019-12-18',
'2019-12-19', '2019-12-20', '2019-12-21', '2019-12-22',
'2019-12-23', '2019-12-24', '2019-12-25', '2019-12-26',
'2019-12-27', '2019-12-28', '2019-12-29', '2019-12-30',
'2019-12-31'],
dtype='datetime64[ns]', name='date', freq='D')
然后使用DataFrame.reindex:
df = df.set_index('date').reindex(rng).reset_index()
print (df)
date col
0 2019-11-01 NaN
1 2019-11-02 NaN
2 2019-11-03 NaN
3 2019-11-04 NaN
4 2019-11-05 NaN
.. ... ...
56 2019-12-27 NaN
57 2019-12-28 NaN
58 2019-12-29 NaN
59 2019-12-30 NaN
60 2019-12-31 NaN
[61 rows x 2 columns]
或DataFrame.merge 左连接:
df = pd.DataFrame({'date':rng}).merge(df, how='left')
print (df)
date col
0 2019-11-01 NaN
1 2019-11-02 NaN
2 2019-11-03 NaN
3 2019-11-04 NaN
4 2019-11-05 NaN
.. ... ...
56 2019-12-27 NaN
57 2019-12-28 NaN
58 2019-12-29 NaN
59 2019-12-30 NaN
60 2019-12-31 NaN
[61 rows x 2 columns]