python - 如何从数据格式中创建日期年月日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
解决方案
我假设您已经有一个具有以下格式的数据框:
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