如何移除Pandas时间戳时区信息并保留本地时间
解决方法
首先要纠正你初始代码中的时区转换错误:pd.to_datetime(epochs, unit='s')生成的是UTC时间的 naive datetime,dt.tz_localize("US/Pacific")是给这个naive时间直接添加US/Pacific时区标记(相当于把UTC时间当成了US/Pacific本地时间),这和你需要的"将UTC epoch转换为US/Pacific本地时间"不符。
正确完整流程
- 将epoch转换为带UTC时区的datetime
- 转换为US/Pacific时区的带时区datetime
- 移除时区信息,保留本地时间
代码实现:
import numpy as np import pandas as pd epochs = np.arange(1644516000, 1644516000 + 1800*10, 1800) df = pd.DataFrame({'time': epochs}) # 正确转换为US/Pacific时区的带时区时间戳 df['time'] = pd.to_datetime(df['time'], unit='s').dt.tz_localize('UTC').dt.tz_convert("US/Pacific") # 移除时区信息,保留本地时间 df['local_time'] = df['time'].dt.tz_localize(None)
验证结果
执行后df['local_time']的输出和你期望的:
pd.date_range('2022-02-10 10:00', freq='30min', periods=10)
完全一致。
如果你已经有错误转换后的时间列
可以先修正时区标记,再按上述步骤处理:
# 修正错误的时区转换,得到正确的US/Pacific带时区时间 df['time_corrected'] = df['time'].dt.tz_convert('UTC').dt.tz_localize(None).dt.tz_localize('UTC').dt.tz_convert('US/Pacific') # 移除时区保留本地时间 df['local_time'] = df['time_corrected'].dt.tz_localize(None)
内容的提问来源于stack exchange,提问作者Eyal S.
相关产品推荐
相关产品推荐

