Pandas:tz_convert 使用 apply 返回对象而不是 datetime

标签 pandas datetime timestamp

我有一个由 UTC 时间戳索引的数据框,以及指定时区和夏令时与 UTC 的分钟偏移量的 2 列:

                           time_zone  daylight_saving
END_DATE
2017-06-02 00:00:00+00:00          0               60
2017-06-02 01:00:00+00:00          0               60
2017-06-02 02:00:00+00:00          0               60
2017-06-02 03:00:00+00:00          0               60
2017-06-02 04:00:00+00:00          0               60

我正在尝试使用 pytz.FixedOffset 将时间戳转换为本地时区。使用静态偏移量效果很好,我得到了具有适当时区的日期时间:

In [51]: df.tz_convert(pytz.FixedOffset(120))[['time_zone','daylight_saving']].head()
Out[51]:
                           time_zone  daylight_saving
END_DATE
2017-06-02 02:00:00+02:00          0               60
2017-06-02 03:00:00+02:00          0               60
2017-06-02 04:00:00+02:00          0               60
2017-06-02 05:00:00+02:00          0               60
2017-06-02 06:00:00+02:00          0               60

In [52]: df.tz_convert(pytz.FixedOffset(120))[['time_zone','daylight_saving']].head().index
Out[52]:
DatetimeIndex(['2017-06-02 02:00:00+02:00', '2017-06-02 03:00:00+02:00',
               '2017-06-02 04:00:00+02:00', '2017-06-02 05:00:00+02:00',
               '2017-06-02 06:00:00+02:00'],
              dtype='datetime64[ns, pytz.FixedOffset(120)]', name='END_DATE', freq=None)

但是,为了使用偏移列执行此操作,我需要使用 apply 方法:

In [63]: r_df.apply(lambda r: 
r['END_DATE'].tz_convert(pytz.FixedOffset(r['time_zone'] + 
r['daylight_saving'])), axis=1).head()
Out[63]:
0    2017-06-02 01:00:00+01:00
1    2017-06-02 02:00:00+01:00
2    2017-06-02 03:00:00+01:00
3    2017-06-02 04:00:00+01:00
4    2017-06-02 05:00:00+01:00
dtype: object

如您在输出中所见,这将返回一个对象系列,而不是我预期的日期时间系列。

如果我尝试使用 pd.to_datetime 将其转换回来,我将被迫将其返回到 UTC,这违背了应用时区的目的。

有没有办法在保留 tz 信息的同时将其转换回 dt?

最佳答案

我偶然发现了同样的问题并将其报告给 Pandas 社区,社区将我重定向到引用相同问题的旧问题。遗憾的是,问题仍然没有解决方案,但如果您想跟踪问题,可以查看:

  1. The issue I reported.
  2. The issue I was redirected to.

关于Pandas:tz_convert 使用 apply 返回对象而不是 datetime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50359164/

相关文章:

python - 匹配 Pandas 中字符和数字的混合

javascript - moment.js 日期到时间戳国际化(德语)

javascript - 如何将日期转换为时间戳字符串 Angular 2

pandas - 合并 geopandas 中的地理数据框(CRS 不匹配)

python - 使用 Python 将日程表转换为综合报告

用于创建可点击链接的Python代码抛出错误

python - Mysql时间戳数据因列被截断

java - 如何在Java中获取当前日期的百位

python - 将时间转换为纪元(Python)

c# - Windows 上的时间戳类似于 Unix 时间戳和文件操作