使用!=运算符在Python中删除行不起作用

时间:2018-08-24 16:26:44

标签: python pandas dataframe indexing

我想使用以下方法在数据集中删除行:

totes = df3.loc[(df3['Reporting Date'] != '18/08/2017') & (df3['Business Line'] != 'Bondy')]

但是这不是我所期望的;我知道使用后我希望ot删除的行数是496。

totes = df3.loc[(df3['Reporting Date'] == '18/08/2017') & (df3['Business Line'] == 'Bondy')]

当我运行drop函数时,它返回的行要比我的数据集减去496少得多。

有人知道如何解决此问题吗?

1 个答案:

答案 0 :(得分:2)

您正确使用&,但已被滥用。这是一个逻辑问题。注意:

(NOT X) AND (NOT Y) != NOT(X AND Y)

相反,您可以通过~运算符来计算布尔条件的负数:

totes = df3.loc[~((df3['Reporting Date'] == '18/08/2017') & (df3['Business Line'] == 'Bondy'))]

这些括号和掩码可能会造成混淆,因此您可以更清楚地写出以下内容:

m1 = df3['Reporting Date'].eq('18/08/2017')
m2 = df3['Business Line'].eq('Bondy')

totes = df3.loc[~(m1 & m2)]

或者,请注意:

NOT(X & Y) == NOT(X) | NOT(Y)

因此您可以使用:

m1 = df3['Reporting Date'].ne('18/08/2017')
m2 = df3['Business Line'].ne('Bondy')

totes = df3.loc[m1 | m2]