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

循环处理多个DataFrame时如何消除PerformanceWarning告警?

问题描述

我需要为多个DataFrame重置索引,于是创建了容器列表并循环遍历每个DataFrame,但触发了PerformanceWarning。请问是否可以忽略该告警,或是有其他消除告警的方法?

代码示例:

df_list = [short_frml,mid_frml,long_frml]

for x in df_list:
    x.reset_index(inplace=True)

告警信息:

PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling frame.insert many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use newframe = frame.copy()


告警处理方案

1. 是否可以忽略?

如果你的数据量不大,当前代码运行速度在可接受范围内,完全可以忽略这个告警。它只是性能提示,不会影响代码功能的正确性。

2. 消除告警的具体方法

方法一:复制DataFrame消除碎片化

按照告警提示,先对碎片化的DataFrame执行复制操作,再重置索引,从根源解决存储碎片化问题:

df_list = [short_frml, mid_frml, long_frml]

for i in range(len(df_list)):
    # drop=False保留原索引列,不需要的话可以设为True
    df_list[i] = df_list[i].copy().reset_index(drop=False)

这种方式避免了原地修改碎片化的DataFrame对象,同时整理了内部存储结构。

方法二:临时禁用该类告警

如果只是不想看到这个提示,可以通过设置临时屏蔽PerformanceWarning:

import pandas as pd
from warnings import filterwarnings

# 精准禁用PerformanceWarning
filterwarnings("ignore", category=pd.errors.PerformanceWarning)

# 执行重置索引操作
df_list = [short_frml,mid_frml,long_frml]
for x in df_list:
    x.reset_index(inplace=True)

注意:禁用后会错过其他同类型的性能提示,建议只在确认当前场景无问题时使用。

方法三:提前统一整理碎片化DataFrame

如果后续还要对这些DataFrame做大量操作,建议先统一复制整理所有对象,再进行后续处理:

# 先复制所有DataFrame,消除碎片化
df_list = [df.copy() for df in [short_frml, mid_frml, long_frml]]

# 再循环重置索引
for df in df_list:
    df.reset_index(inplace=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 13:21:01