Pandas两种条件删行方法是否等效?为何第一种删多了?
两种删除DataFrame行方法的差异分析
这两种方法在索引唯一的前提下功能完全一致,都是保留AE列不等于"X"的行;但如果DataFrame存在重复索引,第一种方法会出现误删,导致删除行数超出预期。
问题根源
- 第一种方法
df.drop(df[df.AE == "X"].index):通过索引删除行。如果索引有重复,只要某索引出现在df.AE == "X"的结果中,所有对应该索引的行都会被删除——哪怕其中有些行的AE值并不是"X"。 - 第二种方法
df[df["AE"] != "X"]:通过布尔索引直接筛选行,只保留AE值不等于"X"的记录,不受索引是否重复的影响,不会误删。
验证与解决
- 检查是否存在重复索引:
print(df.index.duplicated().any())
如果返回True,说明索引重复是第一种方法出错的原因。
- 修正第一种方法的思路:
- 先重置索引为唯一值,再执行删除:
df = df.reset_index(drop=True) df = df.drop(df[df.AE == "X"].index) - 更推荐直接使用第二种布尔索引的写法,逻辑直观且不易出错。
- 先重置索引为唯一值,再执行删除:
内容的提问来源于stack exchange,提问作者Hélio dos Santos
相关产品推荐
相关产品推荐

