gpt4 book ai didi

python - 在不损失精度的情况下转换 np.datetime64 的时区

转载 作者:太空宇宙 更新时间:2023-11-04 01:58:33 32 4
gpt4 key购买 nike

我有一个 DataFrame,其中一列的类型是 datetime64[ns]。这些代表“欧洲/伦敦”时区的时间,并且精度达到纳秒级。 (数据来自外部系统)

我需要将它们转换为代表 UTC 时间的 datetime64[ns] 条目。所以换句话说,每天增加 0 或 1 小时,具体取决于条目是否在夏令时。

这样做的最佳方法是什么?

不幸的是,我找不到 np.datetime64 中内置的任何时区支持。同时,我不能直接转换为/使用 datetime.datetime 对象,因为那会导致精度损失。到目前为止我唯一能想到的是将 np.datetime64 转换为 datetime.datetime,调整时区,在未调整和调整后的 datetime.datetime 之间获得某种时间增量,然后将该时间增量应用回 np.datetime64。不过,对于我希望可以更轻松地完成的事情,听起来有很多障碍要跳过?

谢谢!

最佳答案

看起来 pandas 使用 dt 访问器对此有一些内置支持:

import pandas as pd
import numpy as np

dt_arr = np.array(['2019-05-01T12:00:00.000000010',
'2019-05-01T12:00:00.000000100',],
dtype='datetime64[ns]')

df = pd.DataFrame(dt_arr)

# Represent naive datetimes as London time
df[0] = df[0].dt.tz_localize('Europe/London')

# Convert to UTC
df[0] = df[0].dt.tz_convert("UTC")

print(df)
# 0
# 0 2019-05-01 11:00:00.000000010+00:00
# 1 2019-05-01 11:00:00.000000100+00:00

假设您从 np.datetime64[ns] 中的一些 ISO 8601 字符串开始,您可以使用 dt.tz_localize 为它们分配时区,然后dt.tz_convert 将它们转换成另一个时区。

我会警告,如果它们以整数形式出现,例如 1556708400000000010,它们很可能已经代表 UTC,因为以秒或纳秒为单位的时间戳通常是Unix epoch times , 它们独立于记录它们的时区(它是 Unix 纪元之后的秒数/纳秒数,而不是民用时间)。

关于python - 在不损失精度的情况下转换 np.datetime64 的时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56253569/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com