如何将Pandas时间戳列从UTC转换为CST、MST、EST等多个时区
时区转换脚本错误排查
原始数据集
start_time_UTC 2021-09-16T12:00:00-05:00 2021-09-15T19:00:00-05:00 2021-09-16T08:18:00-05:00 2021-09-16T12:22:10-05:00
所有错误点汇总
- 变量未定义:代码中未声明
time_stamp变量,直接调用time_stamp.apply会触发NameError,正确写法是引用DataFrame的列df['time_stamp']。 - 列名不匹配:原始数据集的时间字段为
start_time_UTC,代码中错误写为df['start_time'],会导致取值失败。 - 时间格式不匹配:使用的
%a, %d %b %Y %H:%M:%S %Z格式串和2021-09-16T12:00:00-05:00的实际格式完全不符,正确的格式串应为%Y-%m-%dT%H:%M:%S%z。 - lambda逻辑错误:apply遍历的每个元素参数为x,代码中传入strptime的是整个
df.time_stampSeries,而非单个元素x,会导致类型报错。 - 时区转换逻辑错误:直接用
replace(tzinfo)不会做跨时区的时间换算,只会强行给时间加时区标记,正确逻辑是先把原始时间转为UTC基准的带时区时间,再用tz_convert转到目标时区。 - Series操作错误:不能直接对整个时间类型的Series调用
replace、strftime方法,需要用pandas的dt访问器处理。
修正后可运行的完整代码
from datetime import datetime as dt import pandas as pd from pytz import timezone import pytz df = read_dataframe('my_dataset') # 直接转成带时区的datetime类型,pandas会自动识别带偏移的时间格式 df['time_stamp'] = pd.to_datetime(df['start_time_UTC'], utc=False) # 统一转成UTC基准时间 time_utc = df['time_stamp'].dt.tz_convert('UTC') # 转换为对应目标时区 time_cst = time_utc.dt.tz_convert('US/Central') time_mst = time_utc.dt.tz_convert('US/Mountain') time_est = time_utc.dt.tz_convert('US/Eastern') # 格式化生成新列 df['time_published_cst'] = time_cst.dt.strftime('%I:%M:%S %p %Z') df['time_published_est'] = time_est.dt.strftime('%I:%M:%S %p %Z') df['time_published_mst'] = time_mst.dt.strftime('%I:%M:%S %p %Z') df['time_published_utc'] = time_utc.dt.strftime('%I:%M:%S %p %Z')
内容的提问来源于stack exchange,提问作者Cmd-Z MyBrain
相关产品推荐
相关产品推荐

