我有一个列日期为pandas的数据框。我必须延长提到的月份的日期:
输入:
2019-11-30
2019-12-01
2019-12-02
2019-12-03
2019-12-04
输出:
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
答案 0 :(得分:2)
通过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]