微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

带有 pytz 的 Pandas 时间戳

如何解决带有 pytz 的 Pandas 时间戳

我试图弄清楚这个与解决不明确的 DST 过渡(时钟倒退)相关的问题,这个问题需要几个小时的摸索才能缩小范围。

import datetime
import pytz
import pandas as pd

timezone = 'Europe/Madrid'
# Standard datetime with pytz timezone objects
loc_dt = datetime.datetime(2019,10,27,2,0) # Ambiguous - can be 02:00:00+02:00 (DST) or 02:00:00+01:00 (normal)
eastern = pytz.timezone(timezone)
print(eastern.localize(loc_dt,is_dst=True)) # 2019-10-27 02:00:00+02:00 -> OK
print(eastern.localize(loc_dt,is_dst=False)) # 2019-10-27 02:00:00+01:00 -> OK

# Pandas Timestamp using built in localization
loc_ts = pd.Timestamp('2019-10-27 02:00:00')
print(loc_ts.tz_localize(timezone,ambiguous=True)) # 2019-10-27 02:00:00+02:00 -> OK
print(loc_ts.tz_localize(timezone,ambiguous=False)) # 2019-10-27 02:00:00+01:00 -> OK

# Sames pandas timestamp passed to pytz timezone objects
# ambiguous with bool seems to be equivalent of is_dst from pytz
print(eastern.localize(loc_ts,is_dst=True)) # 2019-10-27 02:00:00+02:00 -> OK
print(eastern.localize(loc_ts,is_dst=False)) # 2019-10-27 02:00:00+02:00 -> WRONG OFFSET 0200 

很明显,标准数据时间对象 + pytz 时区和 Pandas 时间戳的内置本地化都可以正常工作。但是,您可以将 Pandas 时间戳直接传递给 pytz 时区,不会标记任何错误/问题,但会出现静失败并返回 +02:00 的偏移量。

我深入研究了 Pandas 代码,但找不到问题。我的假设是,这只是 Python/Pandas 中的大量日期时间/时间戳变体引发的另一个问题。大概 Pandas Timestamp 看起来足够像一个标准的 Datetime 对象,pytz 会处理它,但有一些微妙的问题?

我很乐意将其记录为错误,但不清楚是否可以将其视为 pytz 或 Pandas 问题?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。