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
相关产品推荐
相关产品推荐

