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

如何用pd.concat为DataFrame添加缺失空值列以解决性能警告?

解决DataFrame碎片化的性能警告问题

优化方案:一次性对齐列而非循环添加

你可以通过reindex一次性将每个DataFrame对齐到目标列集合,避免循环添加列带来的碎片化问题,同时结合pd.concat批量合并所有处理后的DataFrame,具体修改后的代码如下:

import pandas as pd
import numpy as np

missing_columns = list(map(str, range(1900, 2022)))
# 定义完整的目标列集合
target_columns = ['Company'] + missing_columns

# 收集所有处理后的DataFrame
dfs = []
for f in files:
    data = pd.read_excel(f)
    # 重命名第一列为Company(保持原逻辑)
    cols = data.columns.tolist()
    new_cols = cols.copy()
    new_cols[0] = 'Company'
    data.columns = new_cols
    
    # 一次性补全所有缺失列,自动填充NaN
    data = data.reindex(columns=target_columns)
    
    # 设置索引并排序列
    data = data.set_index('Company')
    data = data.reindex(sorted(data.columns), axis=1)
    
    dfs.append(data)

# 合并所有DataFrame
final_df = pd.concat(dfs, axis=0)

为什么原代码会触发警告?

原代码中循环遍历missing_columns,逐个执行data[missed] = np.NAN添加列,每次操作都会修改DataFrame的内存结构,多次重复后会导致DataFrame碎片化,进而降低性能。而reindex只需要一次操作就能完成所有缺失列的补全,内存使用更连续,从根源上避免了碎片化问题。

关于pd.concat的使用

pd.concat完全支持传入DataFrame列表作为参数,你只需要先将每个处理好的DataFrame收集到列表中,最后一次性合并即可,这比逐个处理后单独保存的效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 23:20:42