【问题标题】:Convert UTC timestamp to local timezone issue in pandas将UTC时间戳转换为熊猫中的本地时区问题
【发布时间】: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 进行时区调整。然后我将如何调整需要调整的其他列?

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

【问题讨论】:

    标签: python pandas


    【解决方案1】:

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

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

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

    【讨论】:

    • 有效!这也太容易了……?当日期时间从 UTC 时间戳转换时,为什么实际上需要在 tz_localize('UTC') 中告诉它是 UTC?
    • Pandas 不知道它在转换什么。它看到一个时间,但它不知道时间是 UTC,所以它不知道转换时间应该提前或落后多少小时,除非你告诉它。
    猜你喜欢
    • 2019-03-09
    • 2019-08-15
    • 2018-04-17
    • 1970-01-01
    • 2021-12-07
    • 2011-02-06
    • 2013-06-30
    • 2019-01-05
    • 2013-03-23
    相关资源
    最近更新 更多