重新索引 pandas DataFrame 以填充缺失的日期
Reindex pandas DataFrame to fill missing dates
我在 pandas DataFrame df
中有每日数据,但缺少某些日期(例如下面的 1980-12-25)。我想重新索引 DataFrame 以添加具有 NaN 值的日期。
date close
None
0 1980-12-12 28.75
1 1980-12-15 27.25
2 1980-12-16 25.25
3 1980-12-17 25.87
4 1980-12-18 26.63
5 1980-12-19 28.25
6 1980-12-22 29.63
7 1980-12-23 30.88
8 1980-12-24 32.50
9 1980-12-26 35.50
我已经生成了包含我想要的全套日期的列表 dates
。
[Timestamp('1980-12-12 00:00:00'), Timestamp('1980-12-15 00:00:00'), Timestamp('1980-12-16 00:00:00'), Timestamp('1980-12-17 00:00:00'), Timestamp('1980-12-18 00:00:00'), Timestamp('1980-12-19 00:00:00'), Timestamp('1980-12-22 00:00:00'), Timestamp('1980-12-23 00:00:00'), Timestamp('1980-12-24 00:00:00'), Timestamp('1980-12-25 00:00:00'), Timestamp('1980-12-26 00:00:00')]
不幸的是,当我 运行 下面的重新索引命令时,table 完全被 NaN 填充。
df.reindex(dates)
我运行下面的检查,都检查的很好...
>>> type(df['date'][0])
<class 'pandas._libs.tslib.Timestamp'>
>>> type(dates[0])
<class 'pandas._libs.tslib.Timestamp'>
>>> dates[0] == df['date'][0]
True
根据我在你的问题中看到的情况,你需要 set_index()
:
df
date close
0 1980-12-12 28.75
1 1980-12-15 27.25
2 1980-12-16 25.25
3 1980-12-17 25.87
4 1980-12-18 26.63
5 1980-12-19 28.25
6 1980-12-22 29.63
7 1980-12-23 30.88
8 1980-12-24 32.50
9 1980-12-26 35.50
df['date'] = pd.to_datetime(df['date'])
df.set_index('date', inplace=True)
df.reindex(dates)
df
close
date
1980-12-12 28.75
1980-12-15 27.25
1980-12-16 25.25
1980-12-17 25.87
1980-12-18 26.63
1980-12-19 28.25
1980-12-22 29.63
1980-12-23 30.88
1980-12-24 32.50
1980-12-25 NaN
1980-12-26 35.50
您需要设置索引,以便它知道如何对齐您的新索引。这是您的预期输出吗?
我在 pandas DataFrame df
中有每日数据,但缺少某些日期(例如下面的 1980-12-25)。我想重新索引 DataFrame 以添加具有 NaN 值的日期。
date close
None
0 1980-12-12 28.75
1 1980-12-15 27.25
2 1980-12-16 25.25
3 1980-12-17 25.87
4 1980-12-18 26.63
5 1980-12-19 28.25
6 1980-12-22 29.63
7 1980-12-23 30.88
8 1980-12-24 32.50
9 1980-12-26 35.50
我已经生成了包含我想要的全套日期的列表 dates
。
[Timestamp('1980-12-12 00:00:00'), Timestamp('1980-12-15 00:00:00'), Timestamp('1980-12-16 00:00:00'), Timestamp('1980-12-17 00:00:00'), Timestamp('1980-12-18 00:00:00'), Timestamp('1980-12-19 00:00:00'), Timestamp('1980-12-22 00:00:00'), Timestamp('1980-12-23 00:00:00'), Timestamp('1980-12-24 00:00:00'), Timestamp('1980-12-25 00:00:00'), Timestamp('1980-12-26 00:00:00')]
不幸的是,当我 运行 下面的重新索引命令时,table 完全被 NaN 填充。
df.reindex(dates)
我运行下面的检查,都检查的很好...
>>> type(df['date'][0])
<class 'pandas._libs.tslib.Timestamp'>
>>> type(dates[0])
<class 'pandas._libs.tslib.Timestamp'>
>>> dates[0] == df['date'][0]
True
根据我在你的问题中看到的情况,你需要 set_index()
:
df
date close
0 1980-12-12 28.75
1 1980-12-15 27.25
2 1980-12-16 25.25
3 1980-12-17 25.87
4 1980-12-18 26.63
5 1980-12-19 28.25
6 1980-12-22 29.63
7 1980-12-23 30.88
8 1980-12-24 32.50
9 1980-12-26 35.50
df['date'] = pd.to_datetime(df['date'])
df.set_index('date', inplace=True)
df.reindex(dates)
df
close
date
1980-12-12 28.75
1980-12-15 27.25
1980-12-16 25.25
1980-12-17 25.87
1980-12-18 26.63
1980-12-19 28.25
1980-12-22 29.63
1980-12-23 30.88
1980-12-24 32.50
1980-12-25 NaN
1980-12-26 35.50
您需要设置索引,以便它知道如何对齐您的新索引。这是您的预期输出吗?