Pandas DataFrame 按行对应时区将UTC时间转换为本地时间的实现方法
实现方案
核心思路
利用Pandas的逐行操作能力,先将UTC时间列转换为带时区感知的时间类型,再按每行指定的时区做转换。
完整代码
import pandas as pd import pytz # 构造测试数据 ids = 1 timezones = ['America/Los_Angeles', 'Europe/Paris', 'America/New_York'] utc_time = ['2020-09-03 19:36:18.534', '2020-09-03 19:36:18.534', '2020-09-03 19:36:18.534'] df = pd.DataFrame({'id':ids, 'timezone':timezones, 'utc_time':utc_time}) # 1. 将字符串格式的UTC时间转换为带UTC时区标识的datetime类型 df['utc_time'] = pd.to_datetime(df['utc_time']).dt.tz_localize('UTC') # 2. 逐行根据对应时区转换为本地时间 df['local_time'] = df.apply( lambda row: row['utc_time'].tz_convert(row['timezone']), axis=1 ) print(df)
输出结果
id timezone utc_time local_time 0 1 America/Los_Angeles 2020-09-03 19:36:18.534000+00:00 2020-09-03 12:36:18.534000-07:00 1 1 Europe/Paris 2020-09-03 19:36:18.534000+00:00 2020-09-03 21:36:18.534000+02:00 2 1 America/New_York 2020-09-03 19:36:18.534000+00:00 2020-09-03 15:36:18.534000-04:00
注意事项
- 若
utc_time列已经是带UTC时区标识的datetime类型,可跳过第一步的tz_localize操作 - 若需要将转换后的本地时间输出为无时区的字符串格式,可将第二步的lambda逻辑调整为:
lambda row: row['utc_time'].tz_convert(row['timezone']).strftime('%Y-%m-%d %H:%M:%S.%f') - 需确保
timezone列的取值为符合IANA标准的时区名称,示例中的时区均符合要求无需额外处理。
内容的提问来源于stack exchange,提问作者Dr Wampa
相关产品推荐
相关产品推荐

