2016-09-14 51 views
3

我試圖重塑熊貓數據幀從長到寬格式和時間戳失去時區。熊貓長而寬而不失時區意識

這裏是一個重複的例子:在long.time看時,我得到一個時區感知意甲

import pandas as pd 
long = pd.DataFrame(dict(
    ind=[1,1,2, 2], 
    events=['event1', 'event2', 'event1', 'event2'], 
    time=[pd.Timestamp('2015-03-30 00:00:00', tz='UTC'), 
     pd.Timestamp('2015-03-30 01:00:00', tz='UTC'), 
     pd.Timestamp('2015-03-30 02:00:00', tz='UTC'), 
     pd.Timestamp('2015-03-30 03:00:00', tz='UTC')])) 

然後。

0 2015-03-30 00:00:00+00:00 
1 2015-03-30 01:00:00+00:00 
2 2015-03-30 02:00:00+00:00 
3 2015-03-30 03:00:00+00:00 
Name: time, dtype: datetime64[ns, UTC] 

和重塑這樣

wide = long.set_index(['ind'] + ['events']).unstack(level=1).reset_index() 

的時區後消失。例如。 wide.time.event1

0 2015-03-30 00:00:00 
1 2015-03-30 02:00:00 
Name: event1, dtype: datetime64[ns] 

是否還有另一種不會丟失時區的重構方式?

回答

0

pandas正在追蹤中。當你unstack,改造必須發生在numpy失去的軌道。這是由

df = pd.concat([long.time, pd.Series(long.time.values)], 
       axis=1, keys=['pandas', 'numpy']) 

df 
證明

enter image description here

df.dtypes  

pandas datetime64[ns, UTC] 
numpy   datetime64[ns] 
dtype: object 

解決辦法是重新塑造每一個你關心

for c, col in wide.filter(like='time').iteritems(): 
    wide[c] = col.astype(long.time.dtype) 

wide 

enter image description here

+0

任何解決方法列作爲D型,你C應該建議? – kael

+0

@kael upated後 – piRSquared