Pandas/Polars/Torch中高效列迭代与函数应用方案探究
按列遍历表格执行函数的高效实现测试与分析
测试目标
- 找到Python及其第三方库中按列遍历表格并对每列执行函数的高效/最快实现方式
- 验证lazy计算在该场景下的可行性
测试背景
为提升函数运行速度,针对两类模型(小型模型、大型Torch模型)开展测试,本次测试以对每列执行seasonal_decompose的小型模型为对象。
测试环境
- 服务器:EC2 t2.large(X86_64)
- Python版本:3.11.5
- 依赖库版本:Polars 0.19.13,Pandas 2.1.1,NumPy 1.26.0
测试数据
采用11020行×1578列的随机数据,分别构建Pandas DataFrame与Polars DataFrame作为测试载体。
测试方案与结果
1. Pandas实现方案及耗时
- 字典+for循环:14.349s
- 字典+列表推导:14.344s
- 结合Torch实现:23.142s
- 结合
multiprocessing多进程:4.582s
2. Polars实现方案及耗时
- 结合Torch实现:13.814s
- Lambda+
map_batches:82.560s(疑似实现方式不佳导致性能大幅下降) - for循环:13.342s
- 字典+列表推导:13.008s
- 结合
multiprocessing多进程:4.997s
3. Lazy计算验证
为Polars操作添加lazy/collect逻辑后未提升性能,核心原因是传入的seasonal_decompose函数并非lazy类型,无法适配Polars的惰性执行机制。
测试结论
- 单进程场景下,Pandas与Polars的字典+列表推导方案性能表现接近
- 使用
multiprocessing做进程并行优化可大幅提升运行速度,且该方案同时适配Pandas与Polars - 整体耗时的核心来源是
seasonal_decompose函数本身,单列处理耗时约0.012s - 列处理函数
process_col的返回值类型对性能存在轻微影响
内容的提问来源于stack exchange,提问作者Aaron C
相关产品推荐
相关产品推荐

