将 lambda 应用于 tz 感知时间戳
applying lambda to tz-aware timestamp
我有一个 pandas 数据框(名为 s),其中一列(日期)是时间戳
s.date[0]
Out[126]:
Timestamp('2014-01-28 00:52:00-0500', tz='dateutil//usr/share/zoneinfo/America/New_York')
在代码中的某个时刻,我需要 select 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
我说过,让我使用 lambda 将 .hour 应用于每个 "row"。因此:
s.date[idx].apply(lambda x: x.hour)
Out[129]:
1019 5
1020 6
1021 7
如您所见,我得到的时间不是 "Eastern Time",而是 UTC。
我在网上做了一些搜索,但一无所获...
有没有办法获取非 UTC 时间?
谢谢!
使用 .dt 访问器。
文档:http://pandas.pydata.org/pandas-docs/stable/basics.html#dt-accessor
使用 Pandas 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
我有一个 pandas 数据框(名为 s),其中一列(日期)是时间戳
s.date[0]
Out[126]:
Timestamp('2014-01-28 00:52:00-0500', tz='dateutil//usr/share/zoneinfo/America/New_York')
在代码中的某个时刻,我需要 select 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
我说过,让我使用 lambda 将 .hour 应用于每个 "row"。因此:
s.date[idx].apply(lambda x: x.hour)
Out[129]:
1019 5
1020 6
1021 7
如您所见,我得到的时间不是 "Eastern Time",而是 UTC。
我在网上做了一些搜索,但一无所获... 有没有办法获取非 UTC 时间?
谢谢!
使用 .dt 访问器。
文档:http://pandas.pydata.org/pandas-docs/stable/basics.html#dt-accessor
使用 Pandas 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