为什么我在python中获取2017年12月12日凌晨12点到1点之间的时间戳的NonExistentTimeError

时间:2017-03-16 06:30:19

标签: python pandas dataframe timezone

尝试在for循环中将两个Pandas DF附加在一起时出现此错误:

Aggdata=Aggdata.append(Newdata)

这是完整的错误:

File "pandas\tslib.pyx", line 4096, in pandas.tslib.tz_localize_to_utc (pandas
\tslib.c:69713)
pytz.exceptions.NonExistentTimeError: 2017-03-12 02:01:24

然而,在我的文件中,我没有这样的时间戳,但我确实有像03/12/17 00:45:26或03/12/17 00:01:24那样的时间戳。在夏令时前2小时。如果我手动删除有问题的行,我会在3月12日12到1点之间的下一行得到相同的错误。

我的原始日期/时间列没有TZ信息,但我在EST中计算了另一列,在连接之前将其本地化为EST,时间与TZ信息:

`data['EST_DateTimeStamp']=pd.DatetimeIndex(pd.to_datetime(da‌​ta['myDate'])).tz_lo‌​calize('US/Eastern')‌​.tz_convert('US/East‌​ern')`

在这里做一些研究,我知道12日凌晨2点到3点应该有这样的错误,但为什么午夜到凌晨1点。我正确地将其本地化吗?那么为什么追加线上的错误,而不是本地化线?

我能够在一个非常简单的MCVE中重现这种行为,保存在这里: https://codeshare.io/GLjrLe

我绝对难以理解,错误是在第三个追加上引发的,并且只有在接下来的3个附加后面才会出现错误。换句话说,如果我评论最后3个附加副本,它可以正常工作......无法想象发生了什么。

感谢您的阅读。

2 个答案:

答案 0 :(得分:0)

如果其他人仍然觉得这有用:

与@ hashcode55谈论它,解决方案是在我的服务器上升级Pandas,因为这可能是我之前版本的该模块中的一个错误。

答案 1 :(得分:0)

该问题似乎发生在夏令时切换-每年不存在不存在的本地时间。在相反的方向会有重复的时间。

这可能是由于您输入的日期通过添加固定的偏移量而从UTC转换为“本地时间”。当您尝试对这些内容进行本地化时,您会在该小时内(如果您在阿德莱德,则为30分钟)遇到不存在的时间。