我有一个数据帧,我只想保留COL1不包含("Danio_rerio")和COL2不包含("Homo_Sapiens")的行
因此,我使用了以下语法:
df.loc[~ (df['COL1']=="Danio_rerio") & (df['COL2']=="Homo_sapiens")]
但它做不到我想要的,我错过了什么?
我有一个数据帧,我只想保留COL1不包含("Danio_rerio")和COL2不包含("Homo_Sapiens")的行
因此,我使用了以下语法:
df.loc[~ (df['COL1']=="Danio_rerio") & (df['COL2']=="Homo_sapiens")]
但它做不到我想要的,我错过了什么?
在这里,这两个条件都需要~
,所以添加了()
-这意味着如果匹配"Danio_rerio"
和Homo_sapiens
,则删除行:
df.loc[~ ((df['COL1']=="Danio_rerio") & (df['COL2']=="Homo_sapiens"))]
或者使用德摩根定律,将==
到!=
和&
到|
倒置:
df.loc[(df['COL1']!="Danio_rerio") | (df['COL2']!="Homo_sapiens")]
OP不是要求两个值都不应该在各自的列中吗?
如果匹配"Danio_rerio"
或Homo_sapiens
,则表示删除行:
df.loc[~ ((df['COL1']=="Danio_rerio") | (df['COL2']=="Homo_sapiens"))]
df.loc[(df['COL1']!="Danio_rerio") & (df['COL2']!="Homo_sapiens")]