2015-11-24 13 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