【问题标题】:applying lambda to tz-aware timestamp将 lambda 应用于 tz 感知时间戳
【发布时间】:2016-02-26 10:18:06
【问题描述】:

我有一个 pandas 数据框(名为 s),其中一列(日期)是时间戳

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

我说,让我使用 lambda 将 .hour 应用于每个“行”。因此:

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

如您所见,我得到的时间不是“东部时间”,而是 UTC。

我在网上做了一些搜索,但没有... 有没有办法获得非UTC时间?

谢谢!

【问题讨论】:

  • 使用.dt访问器...

标签: python pandas lambda pytz


【解决方案1】:

使用 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

【讨论】:

  • 有趣...我知道 dt 命令,但它不起作用。事实证明,当使用“America/New York”使时间 tz-aware 时,dt 不起作用。另一方面,如果我使用“EST”,它会起作用。这是预期的行为吗
【解决方案2】:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-21
    • 2013-08-13
    • 2018-12-12
    • 2016-03-08
    • 2020-04-30
    • 2019-01-02
    相关资源
    最近更新 更多