2017-07-17 154 views
0

我在熊猫数据框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')] 

不幸的是,当我运行下面的reindex命令时,表格变得完全充满了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 

回答

0

从我在你的问题看,你需要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 

您需要设置索引,以便知道如何对齐新索引。这是你的预期产出吗?

+0

谢谢安德鲁!这正是问题所在。没有发现日期栏不是索引。 – Andras

+0

太棒了,很高兴提供帮助。 –