I have a dataframe and I want to only keep row where COL1 does not contains ("Danio_rerio") and COL2 does not contains ("Homo_sapiens")
So I used the following syntax:
df.loc[~ (df['COL1']=="Danio_rerio") & (df['COL2']=="Homo_sapiens")]
But it does not do what I whant, I’m missing something ?
>Solution :
Here need ~ for both conditions, so added () – it means remove rows if match "Danio_rerio" and Homo_sapiens:
df.loc[~ ((df['COL1']=="Danio_rerio") & (df['COL2']=="Homo_sapiens"))]
Or use De morgans laws and invert == to != and & to |:
df.loc[(df['COL1']!="Danio_rerio") | (df['COL2']!="Homo_sapiens")]
Doesn’t OP ask for both values shouldn’t be in the respective columns?
It means remove rows if match "Danio_rerio" or Homo_sapiens:
df.loc[~ ((df['COL1']=="Danio_rerio") | (df['COL2']=="Homo_sapiens"))]
df.loc[(df['COL1']!="Danio_rerio") & (df['COL2']!="Homo_sapiens")]