Pandas DataFrame移除重复列出错:保留首列却误删相关列求助
解决Pandas删除重复列(保留首个)的问题
你的问题核心是获取重复列索引的方式错误,导致误删了原本要保留的首列。
先明确你的场景:DataFrame中列0、2、4的内容完全重复(都是[1,2,3,4,5]),你需要保留列0、删除列2和4,但执行drop后这三列全被删掉,说明你的duplicate_cols实际包含了列0的索引,而非仅[2,4]。
错误原因
你大概率在识别重复列时,使用了会标记所有重复列(包括首个出现的)的逻辑,比如用了df.T.duplicated(keep=False)——这个参数会把所有内容重复的列都标记为True,导致duplicate_cols变成[0,2,4],执行drop时自然会删掉所有这三列。
正确操作步骤
要实现“保留首个重复列,删除后续重复列”,正确流程如下:
识别需要删除的重复列:
将DataFrame转置(行变列),用duplicated(keep='first')标记后续重复的行(即原DataFrame的列)。这个参数会保留第一个出现的列,只把后面的重复列标记为True。# 转置后检查重复行,得到需要删除的列的布尔标记 duplicate_mask = df.T.duplicated(keep='first') # 获取需要删除的列的索引 duplicate_cols = df.columns[duplicate_mask]对你的DataFrame来说,
duplicate_mask会是[False, False, True, False, True, False],对应的duplicate_cols就是[2,4],和你预期一致。执行删除操作:
用你原来的drop代码即可:df_cleaned = df.drop(duplicate_cols, axis=1)这样只会删除列2和4,保留列0、1、3、5,得到你想要的结果。
完整示例代码
假设你的原始DataFrame是这样创建的:
import pandas as pd data = [ [1, 2.3, 1, 2.5, 1, 4.5], [2, 2.3, 2, 2.5, 2, 4.5], [3, 2.3, 3, 2.5, 3, 4.5], [4, 2.3, 4, 2.5, 4, 4.5], [5, 2.3, 5, 2.5, 5, 4.5] ] df = pd.DataFrame(data)
执行正确操作后,df_cleaned的输出就是你预期的结果:
0 1 3 5 0 1 2.3 2.5 4.5 1 2 2.3 2.5 4.5 2 3 2.3 2.5 4.5 3 4 2.3 2.5 4.5 4 5 2.3 2.5 4.5
内容的提问来源于stack exchange,提问作者lucian
相关产品推荐
相关产品推荐

