如何仅根据前x行值删除Pandas DataFrame中的重复列?
问题:基于前N行识别并删除大型数据集中的重复列
我正在处理一个大型数据集(921600行、23列),其中存在列名不同但值完全重复的列。使用df.T.drop_duplicates().T这类全量检查的方案耗时过长,因为它会遍历全部921600行进行比对。我希望仅通过比较前x行(比如前10行)的值来识别并删除这类重复列,比如示例数据中的channel2和channel2-b。
数据集示例:
channel1 channel2 channel3 channel2-b0 47 46 27 46
1 84 28 28 28
2 72 79 68 79
... ... ... ... ...
999997 4729 1957 2986 1957
999998 9918 1513 2957 1513
999999 1001 5883 7577 5883
解决方案:基于前N行筛选重复列
核心思路是仅提取数据集的前N行进行转置去重,再用得到的列名去原数据集中保留非重复列,大幅减少计算量。
代码实现
假设使用Pandas处理数据,具体代码如下:
import pandas as pd # 自定义要比对的前N行数量 n_rows = 10 # 提取前N行转置去重,获取非重复列名 unique_cols = df.head(n_rows).T.drop_duplicates().T.columns # 筛选原数据集,保留非重复列 df_cleaned = df[unique_cols]
关键逻辑说明
df.head(n_rows):快速提取前N行数据,直接把计算量从92万行压缩到N行,这是提速的核心.T.drop_duplicates().T:对前N行的转置结果去重,再转置回原结构,得到基于前N行判定的非重复列名- 最后用筛选后的列名提取原数据集,完成重复列删除
注意事项
- 选择的N值要足够大,避免误删“前N行巧合相同但后续行存在差异”的列,可根据数据情况调整为50或100行,计算量仍远小于全量比对
- 如果数据存在缺失值,可先对前N行做简单的缺失值处理(如填充),避免因缺失值导致的误判
内容的提问来源于stack exchange,提问作者Oskar
相关产品推荐
相关产品推荐

