如何用Pandas基于OR条件删除Excel行?条件出错致全删求助
修复Pandas筛选时误删所有行的逻辑错误
你的问题出在逻辑运算符的误用上:
你原本想删除「既不是com也不是gov」的行,但代码里写的是(com != "com") | (com != "gov")——这个条件对所有行都成立:
- 当值是
com时,com != "gov"为真,整个条件为真 - 当值是
gov时,com != "com"为真,整个条件为真 - 当值是
org时,两个判断都为真,条件也为真
所以所有行都被标记为要删除,最终清空了整个DataFrame。
正确写法
把逻辑或|换成逻辑与&,表示「同时满足既不是com、也不是gov」的行才删除:
combinedMonthVulnDataFrame.drop(combinedMonthVulnDataFrame[(combinedMonthVulnDataFrame['com'] != "com") & (combinedMonthVulnDataFrame['com'] != "gov")].index, inplace = True)
更简洁的替代写法
用isin方法可以让代码更易读,直接保留指定值的行:
# 保留com和gov的行,直接筛选而非删除 combinedMonthVulnDataFrame = combinedMonthVulnDataFrame[combinedMonthVulnDataFrame['com'].isin(["com", "gov"])] # 如果想用drop的方式,也可以这么写 combinedMonthVulnDataFrame.drop(combinedMonthVulnDataFrame[~combinedMonthVulnDataFrame['com'].isin(["com", "gov"])].index, inplace=True)
内容的提问来源于stack exchange,提问作者Robert
相关产品推荐
相关产品推荐

