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

如何在Pandas中按行将UTC时间转换为对应时区的时间?

解决方案

要实现逐行将time_gmt转换为tz_id指定时区的需求,你可以通过以下两种可行方法实现:

方法一:使用apply逐行处理

通过自定义函数结合apply(按行遍历)来处理每行的时区转换逻辑:

import pandas as pd

def convert_row_timezone(row):
    tz_id = row['tz_id']
    if pd.notna(tz_id):
        # 转换为指定时区
        return row['time_gmt'].tz_convert(tz_id)
    else:
        # tz_id为空时返回NaT
        return pd.NaT

# 生成tz_time列
df['tz_time'] = df.apply(convert_row_timezone, axis=1)

方法二:使用列表推导式(效率更高)

对于数据量较大的DataFrame,列表推导式的执行效率通常优于apply,逻辑和上面一致:

df['tz_time'] = [
    time_gmt.tz_convert(tz_id) if pd.notna(tz_id) else pd.NaT
    for time_gmt, tz_id in zip(df['time_gmt'], df['tz_id'])
]

你之前写法的问题分析

  1. 第一种写法:df['time_gmt'].dt.tz_convert(df['tz_id'])
    tz_convert方法仅接受单个时区字符串/时区对象,无法直接传入Series类型的参数,因此会报错。

  2. 第二种写法:lambda x: x.tz_convert(df[pd.notna(df.tz_id)]['tz_id'])
    这里的df[pd.notna(df.tz_id)]['tz_id']是整个非空的tz_id列,而非当前行对应的单个时区值,导致无法正确匹配每行的时区,自然无法得到预期结果。

内容的提问来源于stack exchange,提问作者its_me

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 03:45:40