2017-01-18 73 views
3

讓我們考慮下面的數據幀01月16跨越上午10點至下午4點:Python的大熊貓:重新編制數據幀時區轉換後

date_range1 = pd.date_range(dt(2017,1,16,10), dt(2017,1,16, 20), freq='2H') 
df = pd.DataFrame(data = np.random.rand(len(date_range1),2), index = date_range1) 

我稍長DateTimeindex跨越0AM重新索引它至晚上11時得到期望的結果, NaN的填充0-10am和4-11pm之間的時間範圍,其中沒有數據:

date_range2 = pd.date_range(dt(2017,1,16,0), dt(2017,1,16, 23), freq='2H') 
df.reindex(date_range2) 

enter image description here

然而,如果我米odify的df的時區第一,然後做同樣的重建索引操作產量數據幀完全充滿的NaN值:

df = df.tz_localize("Europe/Helsinki").tz_convert('UTC') 
df.reindex(date_range2) 

enter image description here

任何人有任何想法,這裏發生了什麼?

+0

這看起來像我的錯誤,新的索引是時區的感知,但它是UTC所以應該能夠處理任何日期時間索引,我會在[github](https://github.com/pandas-dev/pandas/issues) – EdChum

+0

上發佈錯誤而不是bug; UTC與天真完全不一樣。 – Jeff

回答

2

修復:

一種解決方法將得到從時區感知(tzDateTimeIndex使用tz_convert(None)轉換爲UTC時間,以便在他們(區別就在這裏,UTC+02:00後襬脫了時區信息)被添加到結果時間戳中。

然後,這些將重新正確索引。

np.random.seed(42) 
df1 = df.tz_localize("Europe/Helsinki").tz_convert('UTC').tz_localize(None) 
df1.reindex(date_range2) 

enter image description here


正確做法:

默認情況下,在pd.date_rangetz關鍵字參數爲None,而不是"UTC"。我們需要爲下面的重新索引情況,通過比較它們的UTC時間戳相應地改變這樣的:

date_range2.tz = 'UTC' 
df1 = df.tz_localize("Europe/Helsinki").tz_convert('UTC') 
df1.reindex(date_range2) 

enter image description here