You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据城市名称将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:00Montevideo2022-06-22 22:00:00-03:00
2022-05-10 05:00:00Brasilia2022-05-10 02:00:00-03:00
2022-07-16 22:47:00Casablanca2022-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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 22:33:23