如何根据城市名称将Pandas中的UTC时间转换为对应本地时间?
Pandas按行批量转换UTC时间到对应城市本地时间实现方法
核心逻辑:转换的前提是UTC时间列必须先被明确标记为UTC时区,再逐行匹配对应城市的时区做转换,不能用全局统一时区参数做批量处理。
- 依赖说明:使用pandas原生接口即可实现,pandas 1.3+版本内置时区支持,无需额外安装第三方时区库
- 你给出的样例中三个城市名刚好匹配IANA标准时区命名,可直接用于转换,若实际数据存在城市别名、拼写偏差,需要先做名称映射再转换
完整实现代码
import pandas as pd # 读取/构造你的数据集 df = pd.DataFrame({ "time": ["2022-06-23 01:00:00", "2022-05-10 05:00:00", "2022-07-16 22:47:00"], "timezone": ["Montevideo", "Brasilia", "Casablanca"] }) # 1. 将时间列转为带UTC时区标记的datetime格式,这步不能省略,否则转换会报时区不存在的错误 df["time_utc"] = pd.to_datetime(df["time"], utc=True) # 2. 逐行匹配timezone列的城市值,转换为对应本地时间 df["local_time"] = df.apply( lambda row: row["time_utc"].tz_convert(row["timezone"]), axis=1 )
转换结果参考
运行代码后得到的本地时间列取值如下,自带对应城市的时区偏移标记:
| 原始UTC时间 | 目标城市 | 转换后本地时间 |
|---|---|---|
| 2022-06-23 01:00:00 | Montevideo | 2022-06-22 22:00:00-03:00 |
| 2022-05-10 05:00:00 | Brasilia | 2022-05-10 02:00:00-03:00 |
| 2022-07-16 22:47:00 | Casablanca | 2022-07-16 23:47:00+01:00 |
常见补充需求
如果需要去掉时区偏移信息,只保留纯本地时间的datetime值,可以加一行处理:
# 移除时区标记,得到无时区偏移的本地时间戳 df["local_time_naive"] = df["local_time"].dt.tz_localize(None)
踩坑提示:不要跳过给原始时间列标记UTC时区的步骤,未标记时区的datetime是naive类型,直接调用tz_convert会抛出异常。如果你的timezone列存在非标准时区名,需要先建立城市名到IANA标准时区名的映射字典,用replace替换成标准名称后再做转换。
内容的提问来源于stack exchange,提问作者Kevin Nash
相关产品推荐
相关产品推荐

