【问题标题】:Fill missing dates in a pandas DataFrame在 pandas DataFrame 中填充缺失的日期
【发布时间】:2022-08-15 23:45:09
【问题描述】:
我有很多带有 2 列的 DataFrame,如下所示:
|
Fecha |
unidades |
| 0 |
2020-01-01 |
2.0 |
| 84048 |
2020-09-01 |
4.0 |
| 149445 |
2020-10-01 |
11.0 |
| 532541 |
2020-11-01 |
4.0 |
| 660659 |
2020-12-01 |
2.0 |
| 1515682 |
2021-03-01 |
9.0 |
| 1563644 |
2021-04-01 |
2.0 |
| 1759823 |
2021-05-01 |
1.0 |
| 2226586 |
2021-07-01 |
1.0 |
可以看出,缺少一些月份。缺失数据取决于 DataFrame,我可以有 2 个月,10 个,100% 完成,只有一个......我需要填写缺失月份的列“Fecha”(从 2020-01-01 到 2021-12-01 ) 并且当将日期添加到 \"Fecha\" 时,将 \"0\" 值添加到 \"unidades\" 列。
Fecha Column 中的每个元素都是一个类 \'pandas._libs.tslibs.timestamps.Timestamp
如何填写每个 DataFrame 的缺失日期?
标签:
python
pandas
dataframe
date
datetime
【解决方案1】:
您可以创建一个日期范围并使用“Fecha”列到 set_index + reindex 添加缺失的月份。然后fillna + reset_index 获取期望的结果:
df['Fecha'] = pd.to_datetime(df['Fecha'])
df = (df.set_index('Fecha')
.reindex(pd.date_range('2020-01-01', '2021-12-01', freq='MS'))
.rename_axis(['Fecha'])
.fillna(0)
.reset_index())
输出:
Fecha unidades
0 2020-01-01 2.0
1 2020-02-01 0.0
2 2020-03-01 0.0
3 2020-04-01 0.0
4 2020-05-01 0.0
5 2020-06-01 0.0
6 2020-07-01 0.0
7 2020-08-01 0.0
8 2020-09-01 4.0
9 2020-10-01 11.0
10 2020-11-01 4.0
11 2020-12-01 2.0
12 2021-01-01 0.0
13 2021-02-01 0.0
14 2021-03-01 9.0
15 2021-04-01 2.0
16 2021-05-01 1.0
17 2021-06-01 0.0
18 2021-07-01 1.0
19 2021-08-01 0.0
20 2021-09-01 0.0
21 2021-10-01 0.0
22 2021-11-01 0.0
23 2021-12-01 0.0