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

Python Pandas:如何高效追加行至DataFrame?原循环代码优化问询

优化Pandas循环追加行的速度问题

兄弟,你这段代码跑慢太正常了——每次用df.loc[len(df)]往DataFrame里加一行,Pandas都得重新调整整个DataFrame的内存布局,重复1万次的话,累积的开销简直爆炸。给你几个高效的优化方案,按推荐程度排序:

方案1:先收集所有行到列表,再一次性生成DataFrame

这是最通用、见效最快的优化方式,因为Python列表的append操作是低开销的,最后只需要一次DataFrame初始化:

import pandas as pd

def get_row(runner):
    row = some_function(runner)
    return row

mycolumns = ['A', 'B']
# 先初始化一个空列表存所有行数据
rows_list = []
for runner in range(10000):
    rows_list.append(get_row(runner))
# 一次性生成DataFrame
df = pd.DataFrame(rows_list, columns=mycolumns)

这个方法比原代码快几十甚至上百倍,完全避免了循环中修改DataFrame的昂贵操作。

方案2:让some_function支持批量处理(如果可行的话)

如果some_function能接受批量输入(比如直接传入整个range(10000)),并返回一个包含所有行数据的列表/二维数组,那效率会更高——直接跳过Python循环的开销,把计算交给更高效的批量逻辑:

import pandas as pd

# 假设修改后的some_function支持批量输入
rows_data = some_function(range(10000))
mycolumns = ['A', 'B']
df = pd.DataFrame(rows_data, columns=mycolumns)

如果some_function原本是单输入的,你可以用列表推导式或者map来批量生成,本质和方案1类似,但代码更简洁:

rows_list = [some_function(runner) for runner in range(10000)]
df = pd.DataFrame(rows_list, columns=mycolumns)

为什么原代码这么慢?

再给你补个知识点:Pandas的DataFrame是基于连续内存块存储的,每次追加行都需要重新分配更大的内存块、复制原有数据、再写入新行——这个操作的时间复杂度是O(n),循环1万次的话总复杂度就是O(n²),数据量越大,慢得越离谱。而先收集列表的方式总复杂度是O(n),自然快得多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:56:14