You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas筛选:保留COL1不含Danio_rerio且COL2不含Homo_sapiens的行出错求解

问题分析与解决方法

你的代码逻辑出错的核心原因是取反运算符~的作用范围和逻辑判断优先级:
你当前的写法~ (df['COL1']=="Danio_rerio") & (df['COL2']=="Homo_sapiens")中,~只对第一个条件(df['COL1']=="Danio_rerio")生效,最终筛选的是「COL1不是Danio_rerio 且 COL2是Homo_sapiens」的行,这和你想要的「COL1不包含Danio_rerio 且 COL2不包含Homo_sapiens」完全不符。

两种正确的写法:

  1. 直接对两个条件分别取反,再用&(逻辑与)连接(注意每个条件单独加括号):
# 方式一:使用 != 直接判断
df.loc[(df['COL1'] != "Danio_rerio") & (df['COL2'] != "Homo_sapiens")]

# 方式二:用 eq() 配合取反
df.loc[(~df['COL1'].eq("Danio_rerio")) & (~df['COL2'].eq("Homo_sapiens"))]
  1. 利用德摩根定律,将「非A且非B」转换为「非(A或B)」,整体取反后筛选:
df.loc[~((df['COL1'] == "Danio_rerio") | (df['COL2'] == "Homo_sapiens"))]

这种写法是先找出所有「COL1是Danio_rerio 或 COL2是Homo_sapiens」的行,再取反得到你需要的结果。

内容的提问来源于stack exchange,提问作者chippycentra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 06:54:23