延长熊猫列中的日期

时间:2020-09-25 11:41:58

标签: python pandas date datetime

我有一个列日期为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

1 个答案:

答案 0 :(得分:2)

通过date_rangeoffsets.MonthBeginoffsets.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]