Pandas多DataFrame索引交集处理:索引未删除的问题排查
问题分析与解决方案
你的代码为什么没生效?
- Pandas的
drop()方法默认不会修改原DataFrame,而是返回一个删除指定索引后的新DataFrame。你只调用了drop()但没把结果赋值回原变量,也没加inplace=True参数,所以原数据完全没变化。 - 循环遍历索引时修改原DataFrame的索引,容易出现遍历异常,而且这种逐行判断的方式效率极低,逻辑也容易出错(比如你的嵌套条件里有重复删除的逻辑)。
正确的处理方式
直接获取三个DataFrame索引的交集,再用这个共同索引过滤所有数据集,一步到位:
# 获取三个DataFrame共有的索引 common_index = TZThree_data.index.intersection(TZOne_data.index).intersection(BearCreek_data.index) # 用共同索引过滤每个DataFrame TZThree_data = TZThree_data.loc[common_index] TZOne_data = TZOne_data.loc[common_index] BearCreek_data = BearCreek_data.loc[common_index]
补充说明
- 如果不想重新赋值(不推荐,原地修改易引发副作用),也可以用
reindex加inplace=True:
TZThree_data.reindex(common_index, inplace=True) TZOne_data.reindex(common_index, inplace=True) BearCreek_data.reindex(common_index, inplace=True)
- 用
index.intersection()是Pandas原生的高效方法,比用set交集更稳妥,能保留索引的原有顺序和类型。
内容的提问来源于stack exchange,提问作者cahrens
相关产品推荐
相关产品推荐

