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

Pandas DataFrame碎片化警告处理:用pd.concat实现自定义列名

解决方案

你遇到的碎片化警告是因为循环调用列插入导致的,只需要先把所有待拼接的列预处理后一次性合并即可,既可以保留自定义列名规则,也能保留指定列筛选逻辑,完整实现如下:

import pandas as pd
import numpy as np

# 模拟你的原始字典数据
dic = {}
for i in np.arange(0,10):
    dic[str(i)] = pd.DataFrame(np.random.randint(0,1000,size=(5000, 20)), 
                               columns=list('ABCDEFGHIJKLMNOPQRST'))

# 第一步:定义你需要保留的列和对应要转换的数据类型
cols_needed = {
    'A': 'int',
    'D': 'int',
    'H': 'int',
    'I': 'int',
    'M': 'int',
    'O': 'int',
    'Q': 'int',
    'R': 'int',
    'S': 'int',
    'T': 'int',
    'C': 'int'
}

# 第二步:收集所有预处理后的待拼接DataFrame
dfs_to_concat = []
for dic_key, df in dic.items():
    # 筛选指定列,批量给列加后缀(后缀为字典的键,对应你原来的str(i))
    tmp_df = df[list(cols_needed.keys())].add_suffix(f'_{dic_key}')
    # 按要求转换列类型
    tmp_df = tmp_df.astype(cols_needed)
    dfs_to_concat.append(tmp_df)

# 第三步:一次性拼接所有列,无碎片化问题
df_out = pd.concat(dfs_to_concat, axis=1)

方案说明

  • 没有在循环中反复修改DataFrame,所有预处理逻辑只生成临时DataFrame存入列表,最后只做一次合并操作,完全规避性能警告
  • 保留了指定列筛选逻辑,只需要修改cols_needed字典即可调整需要提取的列和对应数据类型
  • 列名规则和你原有逻辑完全一致,为原列名_字典键的格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:24:06