首页 > 解决方案 > 如何从数据格式中创建日期年月日1日2日3日4……日31

问题描述

我的数据文件(每日降雨数据)的格式为

df = Year  Month   Day01  Day02  Day03 ..............Day31 
      1970   1       0        0    20                  3.5
      1970   2       0        0    20                  3.5
      1970   3       0        0    20                  3.5
      ...    .       .        .    ..                  ...
      ...    .       .        .    ..                  ...

我想把上面的数据读成日期格式

df = date (year-month-day)

请帮助
您在这里找到数据https://docs.google.com/spreadsheets/d/1sPRiRDYmWyTuuhks3CDWXj0eNcddsJopUNfjEAlSI-w/edit?usp=sharing

标签: pythonpandasdatetime

解决方案


我假设您已经有一个具有以下格式的数据框:

YEAR  MN  DRF01  DRF02  DRF03  DRF04  DRF05  DRF06  DRF07  DRF08  DRF09  DRF10  DRF11  DRF12  DRF13  DRF14  DRF15  DRF16  DRF17  DRF18  DRF19  DRF20  DRF21  DRF22  DRF23  DRF24  DRF25  DRF26  DRF27  DRF28  DRF29  DRF30  DRF31
1971   1    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0   22.0    0.0    0.0    4.6
1971   2    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    NaN    NaN    NaN
1971   3    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0
1971   4    0.0    0.0    0.0    0.0    0.0    0.0   25.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    8.0    0.0    0.0    0.0    0.0    2.0    0.0    0.0    8.6    0.0    0.0    0.0    7.4   24.0    0.0    NaN
1971   5    3.6    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    1.0    0.0   40.0    0.0    0.0  106.0    0.0    2.0    0.0    0.0    0.0    0.0    3.0    6.6    0.0    0.0   22.6   26.8   12.8

您可以通过堆叠列来获得所需的内容。理想的堆叠数据框应该只包含要堆叠的列,其余列移动到索引:

result = df.rename(columns={'MN': 'MONTH'}) \
           .set_index(['YEAR', 'MONTH']) \
           .rename_axis('DAY', axis=1) \
           .stack() \
           .to_frame('RAINFALL') \
           .reset_index()
result['DAY'] = result['DAY'].str[-2:].astype('int')
result['DATE'] = pd.to_datetime(result[['YEAR', 'MONTH', 'DAY']])

结果:

YEAR  MONTH  DAY  RAINFALL       DATE
1971      1    1       0.0 1971-01-01
1971      1    2       0.0 1971-01-02
1971      1    3       0.0 1971-01-03
1971      1    4       0.0 1971-01-04
1971      1    5       0.0 1971-01-05

推荐阅读