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

Pandas使用concat在循环迭代中拼接DataFrame的方案咨询

解决方案

你要的实现逻辑和列表append的写法几乎完全一致,不需要提前在循环外获取第一个DataFrame,官方更推荐的性能最优方案如下:

首选方案:先存列表再一次性拼接

这种方案的时间复杂度是线性的,哪怕循环生成上千个DataFrame也不会有明显性能损耗,写法和你给出的列表示例逻辑完全对齐:

import pandas as pd

# 先初始化空列表存储每次生成的DataFrame
df_buffer = []
for i in range(10):
    # 替换为你实际生成单份DataFrame的逻辑
    current_df = pd.DataFrame({
        "col1": [i, i*2],
        "col2": [i**2, i**3]
    })
    df_buffer.append(current_df)

# 循环结束后一次性完成拼接
result_df = pd.concat(df_buffer, ignore_index=True)

参数说明:如果需要保留每个子DataFrame的原始索引,去掉ignore_index=True即可,加这个参数会生成从0开始的连续新索引。

可选方案:循环中逐步拼接(仅小数据量场景使用)

只有当你每轮迭代都必须拿到当前完整拼接后的DataFrame时,才建议用这种写法,这种写法每次concat都会生成全新的DataFrame对象,循环次数较多时性能会大幅下降:

import pandas as pd

result_df = pd.DataFrame()
for i in range(10):
    current_df = pd.DataFrame({
        "col1": [i, i*2],
        "col2": [i**2, i**3]
    })
    # 直接和已有的结果拼接
    result_df = pd.concat([result_df, current_df], ignore_index=True)

常见疑问解答

  • 为什么官方不推荐预创建空DataFrame再逐行赋值?
    因为逐行赋值的性能比上述列表缓存方案差得多,和循环中反复concat的性能损耗接近,没有必要用这种写法。
  • 列结构不一致能不能用这个方案?
    可以,pd.concat会自动把缺失的列填充为NaN,只要你能接受这个逻辑就可以正常使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 19:06:00