我有一个由 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 社区,社区将我重定向到引用相同问题的旧问题。遗憾的是,问题仍然没有解决方案,但如果您想跟踪问题,可以查看:
关于Pandas:tz_convert 使用 apply 返回对象而不是 datetime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50359164/