Как исключить строки на основе условий многоколоночного значения в pandas dataframe?

#python #pandas

#python #pandas

Вопрос:

Ниже приведено объявление pandas dataframe:

 email             score
a@domain.com      A
b@domain.com      A
c@domain.com      C
d@domain.com      B
  

Я хочу исключить строки с помощью email a@domain.com и c@domain.com .Ожидайте результат, как показано ниже:

 email            score
b@domain.com      A
d@domain.com      B
  

Я пробовал 3 раза, но безуспешно:

 df=df[df.email !='a@domain.com' amp; df.email !='c@domain.com' ]
TypeError: cannot compare a dtyped [object] array with a scalar of type [bool]


df=df[df.email !='a@domain.com' amp;amp; df.email !='c@domain.com' ]
SyntaxError: invalid syntax


df=df[df.email !='a@domain.com' | 'c@domain.com' ]
TypeError: unsupported operand type(s) for |: 'str' and 'str'
  

В чем проблема?

Ответ №1:

Вы должны заключить это в круглые скобки:

 df = df[(df.email != 'a@domain.com') amp; (df.email != 'c@domain.com')]
  

Тем не менее, было бы проще с isin :

 df = df[~df.email.isin(['a@domain.com', 'c@domain.com'])]
  

И теперь:

 print(df)
  

Это будет ожидаемый результат.

Комментарии:

1. что ~ в df = df[~df.email.isin(['a@domain.com', 'c@domain.com'])] ?

2. @kittygirl isin означает, содержит ли он какой-либо элемент в списке, но поскольку это те, которые вам не нужны, используйте этот знак, чтобы получить противоположное значение и удалить их.

3. Почему бы и нет, ! но ~ ?

4. @kittygirl Это очень хороший момент, но в pandas все по-другому, вы должны использовать ~