2014-04-02 314 views
9

我有數據:轉換時區大熊貓據幀

       Symbol  bid  ask 
Timestamp            
2014-01-01 21:55:34.378000 EUR/USD 1.37622 1.37693 
2014-01-01 21:55:40.410000 EUR/USD 1.37624 1.37698 
2014-01-01 21:55:47.210000 EUR/USD 1.37619 1.37696 
2014-01-01 21:55:57.963000 EUR/USD 1.37616 1.37696 
2014-01-01 21:56:03.117000 EUR/USD 1.37616 1.37694 

時間戳是GMT的。有沒有辦法將它轉換成東方?

注意,當我做:

data.index 

我得到的輸出:

<class 'pandas.tseries.index.DatetimeIndex'> 
[2014-01-01 21:55:34.378000, ..., 2014-01-01 21:56:03.117000] 
Length: 5, Freq: None, Timezone: None 

回答

17

本地化指數(使用tz_localize)與UTC(使時間戳時區感知),然後轉換爲東方(使用tz_convert):

import pytz 
eastern = pytz.timezone('US/Eastern') 
df.index = index.tz_localize(pytz.utc).tz_convert(eastern) 

例如:

import pandas as pd 
import pytz 

index = pd.date_range('20140101 21:55', freq='15S', periods=5) 
df = pd.DataFrame(1, index=index, columns=['X']) 
print(df) 
#      X 
# 2014-01-01 21:55:00 1 
# 2014-01-01 21:55:15 1 
# 2014-01-01 21:55:30 1 
# 2014-01-01 21:55:45 1 
# 2014-01-01 21:56:00 1 

# [5 rows x 1 columns] 
print(df.index) 
# <class 'pandas.tseries.index.DatetimeIndex'> 
# [2014-01-01 21:55:00, ..., 2014-01-01 21:56:00] 
# Length: 5, Freq: 15S, Timezone: None 

eastern = pytz.timezone('US/Eastern') 
df.index = index.tz_localize(pytz.utc).tz_convert(eastern) 
print(df) 
#       X 
# 2014-01-01 16:55:00-05:00 1 
# 2014-01-01 16:55:15-05:00 1 
# 2014-01-01 16:55:30-05:00 1 
# 2014-01-01 16:55:45-05:00 1 
# 2014-01-01 16:56:00-05:00 1 

# [5 rows x 1 columns] 

print(df.index) 
# <class 'pandas.tseries.index.DatetimeIndex'> 
# [2014-01-01 16:55:00-05:00, ..., 2014-01-01 16:56:00-05:00] 
# Length: 5, Freq: 15S, Timezone: US/Eastern