拼接DataFrame列表仅保留之前未出现的列,有更优实现方法吗?
优化实现方案
你原有的实现逻辑是正确的,但存在循环中反复拼接大表的性能缺陷,更高效的实现可以先完成所有列筛选的预处理工作,最后仅执行一次拼接操作:
import pandas as pd dfs = [df1, df2, df3, df4] # 替换为你的DataFrame列表 seen_columns = set() preprocessed_dfs = [] for df in dfs: # 筛选当前DataFrame中未在之前出现过的列 target_cols = [col for col in df.columns if col not in seen_columns] preprocessed_dfs.append(df[target_cols]) # 更新已出现的列集合 seen_columns.update(target_cols) # 一次性完成所有片段的拼接 final_df = pd.concat(preprocessed_dfs, ignore_index=True)
优势说明
- 性能大幅提升:仅执行一次
pd.concat,避免了循环中反复拷贝已拼接的大表,数据量越大优化效果越明显 - 维护成本更低:拆分列筛选和拼接两个独立步骤,更容易适配自定义的列处理规则
- 查找效率更高:通过集合存储已出现的列,列存在性判断的时间复杂度为O(1),比对DataFrame列索引直接查询效率更高
如果需要保留原始数据的行索引,删除pd.concat中的ignore_index=True参数即可。
内容的提问来源于stack exchange,提问作者abisko
相关产品推荐
相关产品推荐

