如何快速垂直拼接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
相关产品推荐
相关产品推荐

