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

pandas循环merge触发DataFrame碎片化性能警告如何优化

问题根因

你收到的DataFrame is highly fragmented性能警告,根因是在循环中逐次执行pd.merge()新增列,本质是反复调用frame.insert方法写入数据,这会让DataFrame的内存块变得零散,运算效率会随着循环次数增加快速下降。

修复方案

方案1:先收集所有待合并表,一次性完成合并(推荐)

完全规避循环合并的碎片化问题,性能提升最明显:

  • 第一步:初始化空列表存储所有待合并的DataFrame,把初始的df_out先存入列表
dfs = []
dfs.append(df_out)
  • 第二步:循环过程中不再直接执行merge,只把生成的tmp存入列表
# 你的原有for循环逻辑
for 循环变量 in 遍历对象:
    # 生成tmp的原有代码不变
    ...
    dfs.append(tmp)
  • 第三步:循环结束后,用functools.reduce一次性完成多表按Date的outer合并
from functools import reduce
df_out = reduce(
    lambda left, right: pd.merge(
        left, right, 
        on='Date', how='outer', 
        sort=False, copy=False
    ), 
    dfs
)

方案2:临时抑制警告(仅适合小数据量临时场景)

如果你的数据量很小,碎片化带来的性能影响可以忽略,可以加代码临时抑制该类警告:

import warnings
from pandas.errors import PerformanceWarning
warnings.filterwarnings("ignore", category=PerformanceWarning)

注意:该方案没有解决内存碎片化的根本问题,数据量变大后依然会出现明显卡顿,不推荐长期使用

额外代码修复点

你原有merge代码中sort="false"、copy="false"的写法是错误的,这两个参数需要接收布尔值而非字符串,传字符串"false"会被pandas判定为True,不符合你的预期,需要改为sort=False、copy=False。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:15:05