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

在pandas中新增时区与datetime列 如何替代低效for循环实现快速处理

性能问题原因

  • 你当前用的iterrows逐行迭代方案完全不是高效方案,pandas的逐行操作会产生极高的Python层循环开销,同时每次df.loc赋值也会带来额外的性能损耗,才会出现100行需要6秒的极端低效率情况。
  • 原代码还存在明显笔误:tz参数传入的是i['t'](时间字符串),实际应该取i['z'](时区缩写字段)。

优化方案

核心思路是相同时区的时间批量处理,避免逐行调用方法,优化后代码如下:

import pandas as pd
import pytz

whois_timezone_info = { "A": 1 * 3600, "ACDT": 10 * 3600, "CDT": -5 * 3600, "EST": -5 * 3600}

df = pd.DataFrame({
  't': ['2001-06-01T00:00:00', '2001-06-01T00:00:00'],
  'z': ['CDT', 'EST']
})

# 批量转成naive datetime
df['datetime'] = pd.to_datetime(df['t'])
# 批量映射时区偏移量
df['offset'] = df['z'].map(whois_timezone_info)

# 按时区偏移分组,每组批量做时区本地化
df['datetime-z'] = df.groupby('offset', group_keys=False)['datetime'].apply(
    # FixedOffset参数为分钟偏移,所以要把秒数除以60转换
    lambda g: g.dt.tz_localize(pytz.FixedOffset(int(g.name / 60)))
)

# 可选:删除中间生成的offset列
df.drop('offset', axis=1, inplace=True)

性能对比

针对300万行、时区种类不超过100种的场景,上述优化方案的耗时通常在10秒以内,相比原方案的5小时提速超过1800倍。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:15:04