Pandas Dataframe.filter() — это встроенная функция, которая фильтрует, возвращает подмножество столбцов или строк DataFrame в соответствии с метками в конкретном индексе. Следует отметить, что эта процедура не фильтрует DataFrame по его содержимому. Функция filter() применяется к меткам индекса.
Как фильтровать фрейм данных Pandas
Python Pandas позволяет нам нарезать данные несколькими способами. Часто вам может понадобиться подмножество фрейма данных pandas на основе одного или нескольких значений определенного столбца. Обязательно мы хотели бы выбрать строки на основе одного значения или нескольких значений, присутствующих в столбце.
Для фильтрации данных в Pandas у нас есть следующие параметры.
- Метод Pandas filter().
- Функция Pandas query().
- Индексы Pandas DataFrame.
Использование метода DataFrame.filter()
Синтаксис
|
1 |
DataFrame.filter(self: ~FrameOrSeries, items=None, like: Union[str, NoneType] = None, regex: Union[str, NoneType] = None, axis=None) |
Параметры
- items: в виде списка
Сохраняйте метки от оси, которые находятся в элементах.
- like: str
Сохраняйте метки от оси, для которой «like in label == True».
- regex: str(регулярное выражение)
Сохраняйте метки от оси, для которой re.search(regex, label) == True.
- axis: {0 или «index», 1 или «columns», «None}», значение по умолчанию — «None».
Ось для фильтрации, выраженная индексом(int) или именем оси(str).
По умолчанию это информационная ось, «index» для серии, «columns» для DataFrame.

Пример
Давайте использовать внешний файл CSV для этого примера. Файл, который я использую, называется файлом People.csv, и мы будем импортировать данные с помощью функции pandas read_csv(). Затем мы создадим DataFrame из данных CSV.
В этом примере мы выбираем только первые 10 строк, поэтому я использовал функцию DataFrame.head(), чтобы ограничить количество строк до 10.
Затем мы будем использовать функцию filter() для выбора данных на основе меток.
См. приведенный ниже код.
|
1 2 3 4 5 6 7 8 |
# app.py import pandas as pd dt = pd.read_csv('people.csv') df = pd.DataFrame(data=dt) df10 = df.head(10) print(df10) |
Выход:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
python3 app.py Name Sex Age Height Weight 0 Alex M 41 74 170 1 Bert M 42 68 166 2 Carl M 32 70 155 3 Dave M 39 72 167 4 Elly F 30 66 124 5 Fran F 33 66 115 6 Gwen F 26 64 121 7 Hank M 30 71 158 8 Ivan M 53 72 175 9 Jake M 32 69 143 |
Вы можете видеть, что у нас всего 5 столбцов и 10 строк.
Теперь мы выберем только Name, Height и Weight, используя метод Pandas filter().
|
1 2 3 4 5 6 7 8 9 10 |
# app.py import pandas as pd dt = pd.read_csv('people.csv') df = pd.DataFrame(data=dt) df10 = df.head(10) print(df10) dFilter = df10.filter(['Name', 'Height', 'Weight']) print(dFilter) |
Выход:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
python3 app.py Name Height Weight 0 Alex 74 170 1 Bert 68 166 2 Carl 70 155 3 Dave 72 167 4 Elly 66 124 5 Fran 66 115 6 Gwen 64 121 7 Hank 71 158 8 Ivan 72 175 9 Jake 69 143 |
Фильтр Pandas с регулярным выражением Python
Давайте передадим параметр регулярного выражения в функцию filter(). Python RegEx или регулярное выражение — это последовательность символов, формирующая шаблон поиска. Python RegEx можно использовать для проверки того, содержит ли строка указанный шаблон поиска.
Выберем столбцы по имени, которые содержат «A».
|
1 2 3 4 5 6 7 8 9 |
# app.py import pandas as pd dt = pd.read_csv('people.csv') df = pd.DataFrame(data=dt) df10 = df.head(10) dFilter = df10.filter(regex ='[A]') print(dFilter) |
Выход:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
python3 app.py Age 0 41 1 42 2 32 3 39 4 30 5 33 6 26 7 30 8 53 9 32 |
Регулярное выражение «[A]» ищет все имена столбцов, в которых есть «A».
У нас есть только один столбец, содержащий A; вот почему он возвращает столбец Age.
Выбор строк в DataFrame, используя filter()
Давайте выберем данные на основе индекса DataFrame.
|
1 2 3 4 5 6 7 8 9 |
# app.py import pandas as pd dt = pd.read_csv('people.csv') df = pd.DataFrame(data=dt) df10 = df.head(10) dFilter = df10.filter(like='6', axis=0) print(dFilter) |
В приведенном выше коде мы выбираем строку с индексом 6.
В Pandas DataFrame индекс начинается с 0. Таким образом, 6 должен быть 7-м индексом в DataFrame.
|
1 2 3 |
python3 app.py Name Sex Age Height Weight 6 Gwen F 26 64 121 |
Фильтрация в Pandas с df.query()
filter() — не единственная функция, которую мы можем использовать для фильтрации строк и столбцов.
Pandas DataFrame.query() — это встроенная функция, полезная для фильтрации строк.
См. следующий код.
|
1 2 3 4 5 6 7 8 9 |
# app.py import pandas as pd dt = pd.read_csv('people.csv') df = pd.DataFrame(data=dt) df10 = df.head(10) dFilter = df10.query('Age>40') print(dFilter) |
Выход:
|
1 2 3 4 5 |
python3 app.py Name Sex Age Height Weight 0 Alex M 41 74 170 1 Bert M 42 68 166 8 Ivan M 53 72 175 |
В приведенном выше примере мы фильтруем строки с Age > 40 и получаем всех людей, чей возраст больше 40.
Это похоже на запрос SQL SELECT с предложением WHERE.
Фильтрация несколько столбцов в Pandas DataFrame
Мы можем фильтровать несколько столбцов в Pandas DataFrame с помощью оператора &, не забудьте свернуть подоператоры with().
См. следующий код.
|
1 2 3 4 5 6 7 8 9 |
# app.py import pandas as pd dt = pd.read_csv('people.csv') df = pd.DataFrame(data=dt) df10 = df.head(10) dFilter = df10[(df10.Age >= 40) &(df10.Sex == 'M')] print(dFilter) |
Выход:
|
1 2 3 4 5 |
python3 app.py Name Sex Age Height Weight 0 Alex M 41 74 170 1 Bert M 42 68 166 8 Ivan M 53 72 175 |
В приведенном выше коде мы фильтруем данные на основе двух условий.
- Age > 40
- Sex == М
Если один из них имеет значение False, он отфильтровывает эти данные.
Возвращаемые данные будут удовлетворять нашим условиям.
Заключение
Мы можем фильтровать Pandas DataFrame, используя методы индексов df.filter(), df.query() и df[].
Мы также можем фильтровать несколько столбцов с помощью оператора &.
