如何在Pandas中就地删除重复列名?
就地删除DataFrame中列名重复的列(高效版)
需求说明
需要高效地就地操作,删除DataFrame中列名重复的列(仅保留列名首次出现的列,无论列值是否重复),同时保留列名不同但值相同的列,避免创建临时副本以适配大型数据集清洗场景。
核心解决方案
通过df.drop()配合inplace=True参数直接在原DataFrame上删除重复列名的列,步骤如下:
- 定位所有非首次出现的重复列名
- 就地删除这些列
完整代码示例
import pandas as pd # 构建测试数据 df = pd.DataFrame([[0, 1, 2, 0, 0],[1, 2, 3, 1, 1], [2, 3, 4, 2, 2]], columns=iter('ABCAD')) # 获取重复列名(非首次出现的) duplicate_cols = df.columns[df.columns.duplicated()] # 就地删除重复列 df.drop(columns=duplicate_cols, inplace=True) # 输出结果 print(df)
关键细节说明
- 高效性:此操作直接修改原DataFrame对象,不会生成完整的DataFrame副本,内存占用远低于
df = df.loc[:, ~df.columns.duplicated()]这种重新赋值的方式,适合处理GB级以上的大型数据集。 - 保留规则:
df.columns.duplicated()默认使用keep='first',即保留列名首次出现的列,删除后续重复列;若需保留最后一次出现的列,可改为df.columns.duplicated(keep='last')。 - 列值无关性:仅依据列名判断重复,完全不考虑列值是否相同,符合需求中"保留列名不同但值相同的列"的要求。
内容的提问来源于stack exchange,提问作者user27243451
相关产品推荐
相关产品推荐

