为什么我收到“无法从'2017-10-29 02:04:15推断出夏令时”,尝试使用'歧义'参数?

Mar*_*oma 7 timezone datetime pandas

我设法创建了一个显示相同行为的最小示例:

>>> import pandas as pd
>>> df = pd.DataFrame({'id': [1], 'date': ['2017-10-29 02:04:15']})
>>> df['date'] = pd.to_datetime(df['date'])
>>> df['date'].dt.tz_localize('Europe/Berlin')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/math/.local/lib/python3.5/site-packages/pandas/core/accessor.py", line 88, in f
    return self._delegate_method(name, *args, **kwargs)
  File "/home/math/.local/lib/python3.5/site-packages/pandas/core/indexes/accessors.py", line 99, in _delegate_method
    result = method(*args, **kwargs)
  File "/home/math/.local/lib/python3.5/site-packages/pandas/core/indexes/datetimes.py", line 2368, in tz_localize
    errors=errors)
  File "pandas/_libs/tslibs/conversion.pyx", line 977, in pandas._libs.tslibs.conversion.tz_localize_to_utc
pytz.exceptions.AmbiguousTimeError: Cannot infer dst time from '2017-10-29 02:04:15', try using the 'ambiguous' argument
Run Code Online (Sandbox Code Playgroud)

为什么会发生此错误?

文档tz_localize无法正确解释这一点。

Jör*_*tag 7

该错误消息说,它不能推断夏令时。现在,也许大家都知道,从夏令时到正常时间的更改发生在10月底的凌晨2:00/3:00,实际上,快速查看日历可以知道我们2017年的夏令时更改已经开始10月29

从夏时制到正常时间的更改是通过以下方式发生的:

  1. 时钟在夏令时(DST)从2:00 am到2:59:59.99999999…am运行
  2. 现在是正常时间,在凌晨3:00,时钟再次跳至凌晨2:00 。

因此,时钟有两个不同的时间显示2017-10-29 02:04:15。或者,换句话说,2017-10-29 02:04:15的时间是模棱两可的,却不知道您是否在谈论DST……这正是错误的意思。

  • 其实我认为这个答案是正确答案,我将删除我的+1 (3认同)