将UTC时间戳转换为熊猫中的本地时区问题

Posted

技术标签:

【中文标题】将UTC时间戳转换为熊猫中的本地时区问题【英文标题】:Convert UTC timestamp to local timezone issue in pandas 【发布时间】:2019-04-04 14:52:56 【问题描述】:

我正在尝试将 Unix UTC 时间戳转换为 Pandas 中的本地日期格式。我一直在寻找一些解决方案,但我无法完全理解如何正确地做到这一点。

我有一个包含多个 UTC 时间戳列的数据框,所有这些列都需要转换为本地时区。比如说欧盟/柏林。

我首先通过以下调整将所有时间戳列转换为有效的日期时间列:

df['date'] = pd.to_datetime(df['date'], unit='s') 这有效并给了我以下结果,例如2019-01-18 15:58:25 如果我知道尝试调整此日期时间的时区,我已经尝试了两个:

df['date'].tz_localize('UTC').tz_convert('Europe/Berlin')df['date'].tz_convert('Europe/Berlin')

在这两种情况下,错误都是:TypeError: index is not a valid DatetimeIndex or PeriodIndex,我不明白为什么。

问题一定是 DateTime 列不在索引上。但即使我使用df.set_index('date') 并且在我尝试了上述选项之后它也不起作用并且我得到了同样的错误。

另外,如果可行的话,这个方法似乎只允许对索引的 DateTime 进行时区调整。然后我将如何调整需要调整的其他列?

希望找到一些有关如何最好地一劳永逸地解决这些问题的信息!谢谢

【问题讨论】:

【参考方案1】:

您应该首先通过将.dt. 添加到非索引来指定它是一个日期时间

df['date'] = df['date'].dt.tz_localize('UTC').dt.tz_convert('Europe/Berlin')

如果该列不是索引列,则应使用此选项。

【讨论】:

有效!这也太容易了……?当日期时间从 UTC 时间戳转换时,为什么实际上需要在 tz_localize('UTC') 中告诉它是 UTC? Pandas 不知道它在转换什么。它看到一个时间,但它不知道时间是 UTC,所以它不知道转换时间应该提前或落后多少小时,除非你告诉它。

以上是关于将UTC时间戳转换为熊猫中的本地时区问题的主要内容,如果未能解决你的问题,请参考以下文章

在 VBA 中,如何以简单的方式将 UTC UNIX 时间戳转换为本地时区日期?

如何在 SAP SQL Anywhere 中将 UTC 时间戳转换为命名时区?

Unix 纪元时间戳在 Python 中转换为 UTC 时区

如何从熊猫数据框中的时间戳列中删除时区

将 postgresql 中的 UTC 时区转换为 EST(本地时间)

python / pytz问题从本地时区转换为UTC然后返回