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

寻求高效存储500万行Pandas DataFrame至列表的方法及向量化方案

高效将百万级DataFrame每行转为列表的方法

你的原方法用iterrows()逐行迭代效率很低——因为iterrows()每次都会返回(index, Series)元组,创建Series的额外开销在百万级数据下会被大幅放大,导致整体速度拖沓。下面是几种更高效的方案,包括向量化实现:

1. 向量化方案(最优推荐)

直接利用pandas底层数组操作,完全规避逐行迭代,这是处理大DataFrame的最快方式:

import pandas as pd

# 示例数据
df = pd.DataFrame({ 
                    'id': [0, 1, 2, 3],
                    'val': ['w','x','y','z'],
                    'pos': ['p1','p2','p3','p4']
                 })

# 向量化转换:转numpy数组后直接生成列表
df_lst = df.to_numpy().tolist()
# 等价写法:df.values.tolist()(to_numpy是pandas官方推荐的新API)

这个方法直接操作DataFrame的底层numpy数组,没有逐行迭代的额外开销,500万行数据的转换速度是iterrows()的几十倍甚至上百倍。转换后df_lst的每个元素就是对应行的数值列表,完全匹配需求。

2. 使用itertuples()(比iterrows快数倍)

如果需要灵活控制迭代逻辑(比如保留行索引),可以用itertuples(),它返回元组而非Series,开销远低于iterrows():

# 不带行索引,返回普通元组列表
df_lst = list(df.itertuples(index=False, name=None))

# 若需保留行索引,去掉index=False参数
# df_lst = list(df.itertuples(name=None))

# 如需将元组转为列表,可加一层轻量转换
# df_lst = [list(row) for row in df.itertuples(index=False, name=None)]

itertuples()的速度大概是iterrows()的5-10倍,适合不需要完全向量化但想显著提升效率的场景。

性能对比(针对500万行数据)

  • df.to_numpy().tolist():最快,几乎瞬时完成
  • df.itertuples():次之,比原方法快一个数量级
  • 原iterrows()方案:最慢,耗时是前两者的几十倍

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 21:55:34