Python Pandas中带时区偏移的时间戳列转换最优方案
Pandas 带时区时间戳列处理方案
首先确保目标列被解析为**带时区感知(tz-aware)**的datetime类型:
import pandas as pd # 时间戳列列表 ts_lst = ["SLA_START_TIME", "SLA_STOP_TIME", "RES_START_TIME", "RES_STOP_TIME"] # 解析字符串为带时区的datetime for col in ts_lst: df[col] = pd.to_datetime(df[col], infer_datetime_format=True)
以下是针对每个需求的最优实现:
1. 转换为无时区偏移的UTC时间
先将原时间转换为UTC时区,再移除时区标记,得到无时区感知的UTC时间:
for col in ts_lst: df[f"{col}_UTC_naive"] = df[col].dt.tz_convert("UTC").dt.tz_localize(None)
2. 转换为无时区偏移的EST时间
推荐使用America/New_York时区(自动处理夏令时切换,覆盖EST/EDT),转换后移除时区标记:
for col in ts_lst: df[f"{col}_EST_naive"] = df[col].dt.tz_convert("America/New_York").dt.tz_localize(None)
注:若需强制使用固定UTC-5偏移的标准EST(不处理夏令时),可替换为
Etc/GMT+5
3. 直接移除时区偏移并原样存储
保留原时间的数值部分,仅移除时区标记,得到无时区感知的datetime:
for col in ts_lst: df[f"{col}_raw_no_offset"] = df[col].dt.tz_localize(None)
4. 将UTC时区转换为EST时区
若原时间已为UTC时区,直接转换为带时区感知的美国东部时间;若未明确时区,先转UTC再转换:
for col in ts_lst: # 确保原时间为UTC时区,再转换为美国东部时区(带时区标记) df[f"{col}_UTC_to_EST_tzaware"] = df[col].dt.tz_convert("America/New_York")
5. 移除时区偏移
与需求3逻辑一致,直接移除时区标记,保留原时间数值:
for col in ts_lst: df[f"{col}_no_tz"] = df[col].dt.tz_localize(None)
内容的提问来源于stack exchange,提问作者rams
相关产品推荐
相关产品推荐

