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

如何快速垂直拼接100个同列结构的Pandas DataFrame?

垂直拼接大量同结构DataFrame的最快方法

嘿,这个问题问到点子上了!循环调用df.append()确实是效率极低的做法——每次调用append()都会创建一个全新的DataFrame对象,反复复制数据的操作会让时间和内存开销随着DataFrame数量的增加呈指数级上升,100个的话差距会非常明显。

最优替代方案:pd.concat()

就像字符串列表用str.join()比循环拼接高效得多一样,Pandas专门提供了pd.concat()方法来批量处理DataFrame的拼接,它内部做了大量优化,能一次性处理整个列表,性能碾压循环append()。

示例代码替换

把你原来的循环代码改成这样就行:

import pandas as pd
import numpy as np
from random import randint

# 生成100个同结构的DataFrame列表
lst = [pd.DataFrame(np.empty([randint(1,10),3]), columns=["A","B","C"]) for i in range(100)]

# 一次性垂直拼接所有DataFrame
DF = pd.concat(lst, ignore_index=True)

关键参数说明

  • ignore_index=True:这个参数会重置拼接后DataFrame的索引,避免出现重复索引的问题(每个子DataFrame的索引可能都是从0开始的)。如果不需要保留原索引,可以去掉这个参数。
  • 要是你的DataFrame列结构有差异,pd.concat()会自动对齐列,缺失的列会填充NaN,不过你已经明确是同列结构,所以不用担心这个问题。

为什么pd.concat()更快?

  • 循环append()的时间复杂度接近O(n²):每一次拼接都要复制之前所有的数据,数据量越大,重复复制的成本越高;
  • pd.concat()是O(n)级别的操作:它会先计算所有DataFrame的总数据量,一次性分配内存,然后把所有数据填充进去,彻底避免了反复复制的开销。

内容的提问来源于stack exchange,提问作者Paw in Data

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 15:18:08