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

如何高效对DataFrame列元素应用函数?250万行数据优化需求

百万级DataFrame坐标转换性能优化方案

原代码的核心性能问题

  1. 重复初始化投影对象:每次调用convert函数都重新创建Proj实例,投影对象的初始化存在固定开销,百万次重复调用会累积巨大性能浪费。
  2. 逐行处理低效:apply逐行遍历DataFrame本质是Python循环,无法利用Pandas和PyProj的向量化运算优势,处理百万级数据时速度极慢。

优化方案1:提前初始化投影,使用向量化转换

PyProj的transform函数原生支持直接传入数组(Pandas Series属于数组类型),无需逐行处理:

import pandas as pd
from pyproj import Proj, transform

# 仅初始化一次投影对象
in_proj = Proj('epsg:3857')
out_proj = Proj('epsg:4326')

# 直接传入整列数据进行向量化转换
x2, y2 = transform(in_proj, out_proj, final['X'], final['Y'], always_xy=True)

# 将结果赋值回DataFrame
final['X2'] = x2
final['Y2'] = y2

优化方案2:使用Transformer类(PyProj 2.0+推荐)

PyProj 2.0及以上版本推荐使用Transformer类,API更简洁,性能更优,同样支持向量化操作:

import pandas as pd
from pyproj import Transformer

# 初始化转换器,仅执行一次
transformer = Transformer.from_crs('epsg:3857', 'epsg:4326', always_xy=True)

# 向量化转换整列数据
x2, y2 = transformer.transform(final['X'], final['Y'])

# 赋值结果到DataFrame
final[['X2', 'Y2']] = pd.DataFrame({'X2': x2, 'Y2': y2})

优化效果说明

两种方案都通过避免重复初始化投影对象和利用向量化运算,将原本的逐行循环改为底层C扩展级别的批量处理,百万级数据的处理速度可提升几十至上百倍。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 21:15:41