2017-07-17 151 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

太棒了,很高興提供幫助。 –