如何高效从大型DataFrame字典中提取同名列?(解决性能警告问题)
解决方案
直接使用pd.concat进行批量合并即可,这也是警告里官方推荐的优化方案,避免循环插入列造成的内存碎片化问题:
import pandas as pd # 最简实现,和你原有逻辑输出完全一致 df_filtered = pd.concat( # 提取所有DataFrame的目标列 [df['desired_col'] for df in dic.values()], # 按列合并 axis=1, # 用字典的键作为新DataFrame的列名 keys=dic.keys() )
可选安全版本
如果不确定所有子DataFrame都包含desired_col,可以增加校验逻辑避免报错:
valid_cols = [] valid_keys = [] for key, df in dic.items(): if 'desired_col' in df.columns: valid_cols.append(df['desired_col']) valid_keys.append(key) df_filtered = pd.concat(valid_cols, axis=1, keys=valid_keys)
原方案性能问题说明
循环中反复为DataFrame新增列时,pandas需要每次调整内存分配,插入上千次后内存会被拆分为大量不连续的小碎片,不仅触发警告,执行速度也会越来越慢。pd.concat是底层C优化的批量操作,会提前申请连续内存一次性完成合并,1000个DataFrame的场景下执行速度比循环插入高至少一个数量级。
内容的提问来源于stack exchange,提问作者plonfat
相关产品推荐
相关产品推荐

