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

将df.append替换为pd.concat构建对比DataFrame的最优方法咨询

替换df.append并优化代码的最优方案

核心思路是别在循环里反复拼接DataFrame,先把所有要加的行数据攒到一个列表里,最后一次性生成(或合并)DataFrame——既解决了append弃用的问题,还能大幅提升代码效率。

具体改写步骤:

  1. 先初始化一个空列表存行数据
    别再初始化空DataFrame了,用列表装每行的字典更高效:

    rows = []
    
  2. 改写第一段循环
    把重复调用的split抽出来,减少重复计算,然后把每行数据塞进列表:

    # 处理第一组索引
    for x in {0,7,8,9,10,11,12,13,14,15,18,19,21,23}:
        d1_parts = data1[x].split(':')
        d2_parts = data2[x].split(':')
        rows.append({
            'col1': d1_parts[0],
            'col2': d1_parts[1][:-1],
            'col3': d2_parts[1][:-1],
            'col4': data2[x] == data1[x],
            'col5': '---'
        })
    
  3. 改写第二段(及其他)循环
    同样提前拆分数据,计算差值时先转好数值存变量,代码更清爽:

    # 处理第二组索引,计算数值差
    for x in {4,2,5}:
        d1_parts = data1[x].split(':')
        d2_parts = data2[x].split(':')
        val1 = float(d1_parts[1][:-1])
        val2 = float(d2_parts[1][:-1])
        rows.append({
            'col1': 'SOMENEWROWNAME',
            'col2': d1_parts[1][:-1],
            'col3': d2_parts[1][:-1],
            'col4': data2[x] == data1[x],
            'col5': val2 - val1
        })
    
  4. 一次性生成最终DataFrame
    所有行都攒好后,直接转成DataFrame:

    header = pd.DataFrame(rows)
    

如果要追加到已有DataFrame

要是你需要在已有的header上新加行,就用pd.concat一次性合并,别循环加:

new_rows = []
# 循环填充new_rows...
header = pd.concat([header, pd.DataFrame(new_rows)], ignore_index=True)

为啥这么改?

  • 原append每次循环都会生成新DataFrame,数据量大的时候慢到离谱,用列表攒数据再一次性生成,效率提升不止一个档次
  • 把重复的split、类型转换抽出来,减少冗余计算,代码也更容易读和维护
  • 逻辑更清晰,所有行数据的收集和生成分开,出问题也好排查

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 01:01:12