2013-12-08 32 views
5

當將日常數據(例如,每日價格指數爲16:00)重新索引數據時,如果某一天16:00時間戳沒有1分鐘的數據,我們會想要從最後一個非空的1分鐘數據轉發填充。在下面的情況下,13日16:00之前沒有1分鐘的數據,最後1分鐘的數據來自10日。重新索引時填充方法的功能是什麼?

當使用reindex與method ='ffill'時,不會期望下面的代碼在16:00在13日填寫值嗎?然而,檢查daily1顯示它缺少。

import pandas as pd 
import numpy as np 

hf_index = pd.date_range(start='2013-05-09 9:00', end='2013-05-13 23:59', freq='1min') 
hf_prices = np.random.rand(len(hf_index)) 
hf = pd.DataFrame(hf_prices, index=hf_index) 
hf.ix['2013-05-10 18:00':'2013-05-13 18:00',:]=np.nan 
hf.plot() 

ind_daily = pd.date_range(start='2013-05-09 16:00', end='2013-05-13 16:00', freq='B') 

print(ind_daily.values) 
daily1 = hf.reindex(index=ind_daily, method='ffill') 

填補作爲一個(或者說我)所期望的,我需要這樣做:

daily2 = daily1.fillna(method='ffill') 

如果是這樣的話,什麼是重新索引實際上做的填充方法。我只是從熊貓文檔中看不清楚。在我看來,我不應該這樣做。

+0

嗯。我同意這是意想不到的行爲,可能是一個錯誤。另外,在此期間可以幫助您,使用日期時間索引的數據[resample](http://pandas.pydata。org/pandas-docs/dev/generated/pandas.DataFrame.resample.html)通常是比reindex更好的選擇。尤其要注意關鍵字參數''label''和''close'',這可能與你的問題有關。 –

+0

@ user915否則,如何將數據框重新索引到某個其他頻率,同時仍將缺失值視爲缺失值? –

+0

@runnerup通過使用method = None? – user915

回答

1

我寫我的GitHub的評論在這裏也:

在我看來,當前的行爲更有意義。在某些情況下,'nan'值可能是有效的「實際」值。由於變化的指數,實際'南'值的概念應該與'南'值不同。如果我有這樣一個數據幀:

 A  B  C 
1 1.242 NaN 0.110 
3 NaN -0.185 -0.209 
5 -0.581 1.483 NaN 

,我想保留所有南爲南,它更有道理有:

df.reindex([2, 4, 6], method='ffill') 
     A  B  C 
2 1.242 NaN 0.110 
4 NaN -0.185 -0.209 
6 -0.581 1.483 NaN 

只是採取任何值有(男或不是南),並向前填充,直到下一個可用索引Reindexing不應強制執行數據上的強制填充。

這是

df.reindex([2, 4, 6], method=None) 

產生

A B C 
2 NaN NaN NaN 
4 NaN NaN NaN 
6 NaN NaN NaN 

這裏完全不同的是一個例子:

np.nan可以僅僅意味着不適用;比如說我有小時數據,週末有些計算不適用。我會在週末爲這些專欄填寫nan。現在如果我將reindex設置爲更精細的索引,比如說每分鐘一次,重新索引將從週五選取最後一個值,並在整個週末填充它。這是錯誤的。

在重新索引數據幀時,forward flll表示只是取任何值(nan或not nan)並填充,直到下一個可用索引。 '南'值可能只是您想保留的實際有效觀察結果。

Reindexing不應強制執行數據上的強制填充。

+0

對不起,如果我在上面的例子中誤解了一些東西,但不應該是元素(4,B)= -0.185而不是-0.742?我只是想明白你的觀點。我想我已經開始關於ffill和fillna之間的區別,但我不確定我是否理解這個例子。 – user915

+0

@ user915對不起,這是一個錯誤的複製粘貼。固定的。請參閱github頁面以查看使用示例 –

相關問題