在Pandas中将时间转换为UTC

bzzcjhmw  于 2022-11-05  发布在  其他
关注(0)|答案(2)|浏览(276)

我有多个csv文件,我已经将DateTime设置为索引。

df6.set_index("gmtime", inplace=True)

# correct the underscores in old datetime format

df6.index = [" ".join( str(val).split("_")) for val in df6.index]
df6.index = pd.to_datetime(df6.index)

时间是以GMT格式输入的,但我想当我将时钟设置为raspberry pi时,它被保存为BST(英国夏令时)。我想将时间向后移动一个小时。当我使用

df6.tz_convert(pytz.timezone('utc'))

它给我下面的错误,因为它假设时间是正确的。
无法转换tz-naive时间戳,请使用tz_localize进行本地化
我怎样才能把时间调到一个小时?

icnyk63a

icnyk63a1#

给定一个包含字符串形式的日期/时间信息的列,您可以将其转换为日期时间,本地化为时区(此处为:欧洲/伦敦),然后转换为UTC。您可以在设置为索引之前进行此操作。
例如:

import pandas as pd

dti = pd.to_datetime(["2021-09-01"]).tz_localize("Europe/London").tz_convert("UTC")

print(dti) # notice 1 hour shift:

# DatetimeIndex(['2021-08-31 23:00:00+00:00'], dtype='datetime64[ns, UTC]', freq=None)

注意:设置 * 时区 * 意味着考虑夏令时,即在这里,在冬季您将使用UTC+0,在夏季使用UTC+1。

jdzmm42g

jdzmm42g2#

要添加到FObersteiner的回复中(抱歉,新用户,还不能对答案发表评论):
我注意到,在我遇到的所有真实的情况中(使用完整的 Dataframe 或Pandas系列,而不是单个日期),.tz_localize()和.tz_convert()的调用方式需要略有不同。
对我有效的是

df['column'] = pd.to_datetime(df['column']).dt.tz_localize('Europe/London').dt.tz_convert('UTC')

如果没有.dt,我会得到“索引不是有效的日期时间索引或周期索引”。

相关问题