【问题标题】:Pandas to_datetime produces impossible times熊猫 to_datetime 产生不可能的时间
【发布时间】:2016-07-08 11:06:30
【问题描述】:

我正在使用 pandas 将字符串转换为时间戳。我有一个字符串如下'2016-03-12 18:09:19 PST'

如果我执行以下操作:

pd.to_datetime('2016-03-12 18:09:19 PST')

我明白了:

Timestamp('2016-03-13 02:09:19')

我不确定为什么会发生这种情况。对比以下行为:

pd.to_datetime('2016-03-12 18:09:19')

返回:

Timestamp('2016-03-12 18:09:19')

请注意,美国/太平洋时间实际上并不存在时间Timestamp('2016-03-13 02:09:19')。如果您尝试执行pd.to_datetime('2016-03-12 18:09:19 PST').tz_localize('US/Pacific'),您将获得NonExistentTimeError

为什么在字符串末尾引入“PST”会导致减去 16 小时? to_datetime怎么能介绍不可能的约会?

【问题讨论】:

  • 这不是 16 小时的减法,而是 8 的加法(注意日期变化)。这将使其成为 UTC 时间。

标签: python datetime pandas timezone


【解决方案1】:

Pandas 正在将您的字符串转换为 UTC 时间。省略“PST”时不存在此问题,因为默认情况下,pandas 假定您提供的时间戳已经采用 UTC,因此它不会进行转换。

您可以使用 utc=False 关键字参数停止转换为 UTC。

pd.to_datetime('2016-03-12 18:09:19 PST', utc=False)

【讨论】:

  • 我试过pd.to_datetime('2016-03-12 18:09:19 PST', utc=False)返回Timestamp('2016-03-13 02:09:19')
  • 你用的是什么版本的熊猫?它在 pandas 0.17.0 上为我返回 Timestamp('2016-03-12 18:09:19')
  • pd.__version__ 返回 0.17.1 所以我想这可能是版本问题。我会更新,看看它是否会消失。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 2018-06-05
  • 2021-09-23
  • 2020-11-17
相关资源
最近更新 更多