Удаление строк в Python с использованием оператора! = Не работает - PullRequest
0 голосов
/ 24 августа 2018

Я хочу отбросить строки в моем наборе данных, используя:

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

Однако это не то, чего я ожидаю;Я знаю, что количество строк, которые я хочу удалить, составляет 496 после использования:

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

Когда я запускаю свою функцию удаления, она возвращает намного меньше строк, чем мой набор данных, минус 496.

Кто-нибудь знает, как это исправить?

1 Ответ

0 голосов
/ 24 августа 2018

Вы правильно используете &, но оно используется не по назначению.Это логическая проблема.Примечание:

(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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...