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

已使用pd.concat仍触发DataFrame高度碎片化警告的原因及解决方法

Pandas中DataFrame碎片化警告的异常场景与解决方法

为避免"DataFrame is highly fragmented"警告,已采用pd.concat进行拼接,但在拼接后的DataFrame中添加新列时,部分场景仍会触发该警告,具体场景如下:

  • 案例a:拼接一个空DataFrame与多个Series后添加新列,触发警告
  • 案例b:仅拼接多个Series后添加新列,无警告
  • 案例c:拼接多个DataFrame后添加新列,触发警告

复现代码

import pandas as pd
import sys

print(sys.version)  # 3.8.11
print('pandas version: ',pd.__version__)  # pandas version:  2.0.3

list_of_series = [pd.Series([1,2,3]) for i in range(200)]

a = pd.DataFrame()
a = pd.concat([a]+list_of_series,axis=1)
a['one_more_col'] = [4,5,6]  # concating one df with many series incurs warning

b = pd.concat(list_of_series,axis=1)
b['one_more_col'] = [4,5,6]  # concating series only. It's fine.

c = pd.concat([pd.DataFrame(x) for x in list_of_series],axis=1,)
c['one_more_col'] = [4,5,6]  # concating many dataframes incurs warning

疑问

  1. 为何这三种场景会出现差异?
  2. 若已有拼接后的DataFrame,添加新列应如何操作?是否需要再次使用pd.concat?

注:本问题与Stack Overflow某问题不同,该问题中pd.concat可避免警告,但本场景下拼接后添加列仍会触发案例a和c的警告。

解决方案

问题已解决:感谢@Timus和@jtobelem的解答,使用newframe = df.copy()可消除碎片化,推测df.assign()因内部调用copy也有效,虽仍疑惑案例c的触发原因,但这两种方法可解决问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 23:30:53