Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在不损失精度的情况下转换np.datetime64的时区_Python_Numpy_Datetime_Timezone - Fatal编程技术网

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

Python 在不损失精度的情况下转换np.datetime64的时区,python,numpy,datetime,timezone,Python,Numpy,Datetime,Timezone,我有一个DataFrame,其中一列的类型是datetime64[ns]。它们代表“欧洲/伦敦”时区的时间,精度为纳秒级。(数据来自外部系统) 我需要将这些转换为表示UTC时间的datetime64[ns]项。换句话说,每天增加0小时或1小时,这取决于入口是否在夏季 这样做的最佳方式是什么 不幸的是,我在np.datetime64中找不到任何时区支持。同时,我不能直接转换为datetime.datetime对象,因为这意味着精度损失。到目前为止,我唯一能想到的是将np.datetime64转换为

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

我需要将这些转换为表示UTC时间的datetime64[ns]项。换句话说,每天增加0小时或1小时,这取决于入口是否在夏季

这样做的最佳方式是什么

不幸的是,我在np.datetime64中找不到任何时区支持。同时,我不能直接转换为datetime.datetime对象,因为这意味着精度损失。到目前为止,我唯一能想到的是将np.datetime64转换为datetime.datetime,调整时区,在未调整和调整的datetime.datetime之间获得某种时间差,然后将该时间差应用回np.datetime64。听起来有很多困难需要克服,我希望能更容易地完成


谢谢

使用
dt
访问器,
pandas
似乎对此有一些内置支持:

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\u localize
为它们指定时区,然后使用
dt.tz\u convert
将它们转换为另一个时区


但我要警告的是,如果它们以整数形式出现,比如
1556708400000000010
,它们很有可能已经代表UTC,因为以秒或纳秒为单位的时间戳通常都是UTC,这与它们记录的时区无关(这是Unix纪元后的秒数/纳秒数,而不是民用时间).

是否可以为此添加一个示例,以说明您遇到的问题?用玩的东西回答这个问题会更容易。