如何用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
相关产品推荐
相关产品推荐

