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

Pandas DataFrame最快迭代方式探究:有无比向量化+to_numpy更快的方法?

Pandas DataFrame最快迭代方式测试与探究

针对「Pandas DataFrame最快迭代方式是什么?」这个问题,Stack Overflow及网络上有大量相关讨论。本文通过研读相关内容并结合测试,对比多种实践方法,找出简单场景下的最快迭代方式。本次测试选择对DataFrame两列求和这一基础操作作为测试场景。

测试代码

import pandas as pd
import sys
import time

B = []
t = pd.DataFrame({'a': range(0, 10000), 'b': range(10000, 20000)})
for _ in range(50):
    A = time.time()
    C = (t['a'].to_numpy() + t['b'].to_numpy()).tolist()
    B.append({"method": "1- 向量化 + to_numpy", "time": time.time()-A})

    A = time.time()
    C = (t['a'] + t['b']).tolist()
    B.append({"method": "2- 向量化", "time": time.time()-A})

    C = []
    A = time.time()
    for r in zip(*t.to_dict("list").values()):
        C.append((r[0] + r[1]))
    B.append({"method": "3- zip + to_dict('list')", "time": time.time()-A})

    C = []
    A = time.time()
    for r in zip(t['a'], t['b']):
        C.append((r[0] + r[1]))
    B.append({"method": "4- zip", "time": time.time()-A})

    C = []
    A = time.time()
    for ir in t.itertuples(name=None):
        C.append((ir[1] + ir[2]))
    B.append({"method": "5- itertuples (name=None)", "time": time.time()-A})

    C = []
    A = time.time()
    for ir in t.itertuples():
        C.append((ir[1] + ir[2]))
    B.append({"method": "6- itertuples", "time": time.time()-A})

    C = []
    A = time.time()
    for r in t.to_dict("records"):
        C.append((r["a"] + r["b"]))
    B.append({"method": "7- to_dict('records')", "time": time.time()-A})

print(f'Python {sys.version} on {sys.platform}')
print(f"Pandas版本 {pd.__version__}")
print(pd.DataFrame(B).groupby("method").agg(["mean", "std"]).xs("time", axis=1).sort_values("mean"))

典型测试结果

多次运行代码后,典型输出如下:

Python 3.10.5 (tags/v3.10.5:f377153, Jun  6 2022, 16:14:13) [MSC v.1929 64 bit (AMD64)] on win32
Pandas版本 1.4.3
                               mean       std
method                                       
1- 向量化 + to_numpy  0.000381  0.000491
2- 向量化             0.000440  0.000501
3- zip + to_dict('list')   0.002060  0.000865
4- zip                     0.003218  0.001403
5- itertuples (name=None)  0.004189  0.001836
6- itertuples              0.014681  0.053663
7- to_dict('records')      0.024646  0.044051

测试说明

测试中发现,有时输出结果与上述典型值差异较大,推测是测试时CPU资源繁忙导致的。希望能有更优化的测试代码来获得更稳定的结果(比如采用多进程隔离测试)。

核心问题

是否存在比「1- 向量化 + to_numpy」更快的方法?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 01:09:09