Pandas中重复year列无法保留单个删除其余的技术问询
解决Pandas中重复列名的删除问题
我明白你的困扰——当DataFrame里有多个同名且值完全一致的列时,直接用列名删除会把所有对应列都删掉,确实很头疼。下面给你几个靠谱的解决方案:
方法一:保留每个列名第一次出现的列,自动去重
这个方法最直观,遍历所有列名,只保留第一次出现的列,然后重新生成DataFrame:# 筛选出不重复的列名,保留首次出现的顺序 unique_columns = [] for col in gpd_cinc_merged.columns: if col not in unique_columns: unique_columns.append(col) # 用筛选后的列名重新构建DataFrame gpd_cinc_merged = gpd_cinc_merged[unique_columns]这样处理后,每个列名只会保留第一列,刚好符合你要保留一个
year列的需求。方法二:精准删除指定索引的重复列
你之前尝试按索引删除但没成功,大概率是只删了其中一个重复的year列,还有其他的没处理。看你给出的列索引,year出现在位置4、7、13、14。如果要保留第一个year,删除剩下三个,可以这样写:# 指定要删除的重复列的索引,这里是7、13、14 gpd_cinc_merged.drop(gpd_cinc_merged.columns[[7, 13, 14]], axis=1, inplace=True)注意:一定要确认好要删除的列的索引,避免误删其他列。
方法三:用groupby快速去重(简洁写法)
利用转置+分组的方式,快速对同名列去重,保留每组的第一个列:# 转置后按列名(此时为行索引)分组,取每组第一个再转置回来 gpd_cinc_merged = gpd_cinc_merged.T.groupby(level=0).first().T这个方法代码更简洁,适合处理大量重复列的场景。
为什么之前的操作没生效?
当你使用gpd_cinc_merged.drop('year', axis=1, inplace=True)时,Pandas会匹配所有名为year的列并全部删除;而你之前只删除了索引7的列,剩下的13、14位置还有year列,所以看起来还是有多个重复列。
内容的提问来源于stack exchange,提问作者Jasper
相关产品推荐
相关产品推荐

