2015-11-24 23 views
0

我有一個熊貓數據框(命名爲S)和列(日期)中的一個是時間戳記將拉姆達到TZ感知時間戳

s.date[0] 
Out[126]: 
Timestamp('2014-01-28 00:52:00-0500', tz='dateutil//usr/share/zoneinfo/America/New_York') 

在代碼中的某些時候,我需要選擇的一個子集s(使用idx,布爾值列表)。輸出是:

s.date[idx] 
Out[125]: 
1019 2014-12-01 00:52:00-05:00 
1020 2014-12-01 01:52:00-05:00 
1021 2014-12-01 02:52:00-05:00 
Name: date, dtype: datetime64[ns, tzfile('/usr/share/zoneinfo/America/New_York')] 

由於我只在小時有興趣,我想我可能只是做:

s.date.hour 

,但當然,我得到的錯誤

AttributeError: 'Series' object has no attribute 'hour' 

認爲可以這樣做:

s.date[0].hour 
Out[128]: 0 

I說,讓我使用lambda將.hour應用於每個「行」。因此:

s.date[idx].apply(lambda x: x.hour) 
Out[129]: 
1019  5 
1020  6 
1021  7 

正如你所看到的,我沒有得到的時間「東部時間」,而是在UTC。

我已經做了一些在線搜索,但沒有... 有沒有辦法獲得非UTC時間?

謝謝!

+0

使用'.dt'訪問... – Kartik

回答

0

使用熊貓0.16.2,我沒有得到來自TZ知道本地時間戳美國東部時間的問題。

s = pd.Series(pd.date_range('20130101 09:10:12', periods=4, tz='US/Eastern', freq='H')) 

>>> s 
0 2013-01-01 09:10:12-05:00 
1 2013-01-01 10:10:12-05:00 
2 2013-01-01 11:10:12-05:00 
3 2013-01-01 12:10:12-05:00 
dtype: object 

>>> s.dt.hour 
0  9 
1 10 
2 11 
3 12 
dtype: int64 

它也適用於索引。

idx = [1, 3] 
>>> s.ix[idx].dt.hour 
1 10 
3 12 
dtype: int64 
+0

有趣...... 我知道dt命令,但它不工作。事實證明,當通過使用「美國/紐約」使時間tz意識到時,dt不起作用。另一方面,如果我使用'EST',它就可以工作。這是預期的行爲 – anr