Pandas: как фильтровать элементы «не содержит»?


Вы можете использовать следующие методы для выполнения фильтра «Не содержит» в кадре данных pandas:

Способ 1. Отфильтруйте строки, не содержащие определенной строки.

 filtered_df = df[df[' my_column ']. str . contains (' some_string ') == False ]

Способ 2. Отфильтруйте строки, которые не содержат ни одной из нескольких определенных строк.

 filtered_df = df[df[' my_column ']. str . contains (' string1|string2|string3 ') == False ]

В следующих примерах показано, как использовать каждый метод на практике со следующим DataFrame pandas:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' team ': ['Nets', 'Rockets', 'Mavs', 'Spurs', 'Kings', 'Nuggets'],
                   ' points ': [18, 22, 19, 14, 14, 11],
                   ' assists ': [5, 7, 7, 9, 12, 9],
                   ' rebounds ': [11, 8, 10, 6, 6, 5]})

#view DataFrame
print (df)

      team points assists rebounds
0 Nets 18 5 11
1 Rockets 22 7 8
2 Mavs 19 7 10
3 Spurs 14 9 6
4 Kings 14 12 6
5 Nuggets 11 9 5

Пример 1. Фильтрация строк, не содержащих определенной строки

Следующий код показывает, как фильтровать DataFrame pandas для строк, столбец команды которых не содержит «ets» в имени:

 #filter for rows that do not contain 'ets' in the 'team' column
filtered_df = df[df[' team ']. str . contains (' ets ') == False ]

#view filtered DataFrame
print (filtered_df)

    team points assists rebounds
2 Mavs 19 7 10
3 Spurs 14 9 6
4 Kings 14 12 6

Обратите внимание, что полученный DataFrame не содержит строк, значение которых в столбце команды содержит «ets» в имени.

В частности, из DataFrame были исключены следующие команды:

  • Сети
  • Ракеты
  • Наггетсы

Обратите внимание, что в названии каждой из этих команд есть буква «ets».

Пример 2. Фильтрация строк, которые не содержат ни одной из нескольких определенных строк.

Следующий код показывает, как фильтровать DataFrame pandas для строк, столбец команды которых не содержит «ets» в имени:

 #filter for rows that do not contain 'ets' or 'urs' in the 'team' column
filtered_df = df[df[' team ']. str . contains (' ets|urs ') == False ]

#view filtered DataFrame
print (filtered_df)

    team points assists rebounds
2 Mavs 19 7 10
4 Kings 14 12 6

Обратите внимание, что полученный DataFrame не содержит строк, значение которых в столбце команды содержит «ets» или «urs» в имени.

Примечание : | Оператор означает «ИЛИ» в пандах.

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные операции фильтрации в pandas:

Как фильтровать DataFrame Pandas по значениям столбца
Как фильтровать строки Pandas DataFrame по дате
Как фильтровать DataFrame Pandas по нескольким условиям

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *