Фильтрация

Последнее обновление: 16.01.2026

Одной из ключевых задач при работе с данными является фильтрация на основе определенных условий или критериев. Pandas предоставляет богатые возможности для фильтрации данных в Series.

Фильтрация с помощью операторов сравнения

Прежде всего для фильтрации данных мы можем использовать такие операторы сравнения, как >, >, <=, >=, == и !=. Эти операторы позволяют создать логические маски, которые указывают, удовлетворяет ли каждый элемент в Series указанному условию. Рассмотрим несколько примеров:

import pandas as pd

s = pd.Series([10, 20, 30, 40, 50])

# Фильтрация данных, превышающих 30
filtered_data = s[s > 30]

print(filtered_data)

Вывод программы:

3    40
4    50
dtype: int64

Здесь, используя оператор сравнения <, мы создаем логическую маску, которая проверяет, превышает ли каждый элемент значение 30. Применение этой маски к Series (s > 30) возвращает отфильтрованные данные, которые удовлетворяют условию.

Другой пример:

import pandas as pd

s = pd.Series(["Tom", "Bob", "Sam", "Tom", "Alex", "Alice"])

# Фильтрация элементов, которые равны "Tom"
filtered_data = s[s == "Tom"]

print(filtered_data)

Вывод программы:

0    Tom
3    Tom
dtype: object

Здесь с помощью оператора сравнения == создаем логическую маску, которая проверяет, равен ли каждый элемент значению "Tom". Применение этой маски (s == "Tom") фильтрует Series, сохраняя только те элементы, которые соответствуют указанному значению.

Аналогично можно использовать другие операторы сравнения.

Фильтрация с помощью логических операторов

Логические операторы, (& и |) позволяют объединить нескольких условий. Как и в целом в Python, оператор & указывает, что элементы должны соответствовать сразу двум условиям. Например, нам надо отфильтровать элементы, которые одновременно больше 8 и меньше 20:

import pandas as pd

s = pd.Series([1, 2, 3, 5, 8, 13, 21, 34, 55, 89])

# Фильтрация значений больше 8 И меньше 30
filtered_data = s[(s > 8) & (s < 30)]

print(filtered_data)

Вывод программы:

8
5    13
6    21
dtype: int64

Здесь объединяем два условия: (s > 8) & (s < 30). Эти условия создают две отдельные логические маски. Первая маска проверяет, больше ли каждый элемент 8, а вторая маска проверяет, меньше ли каждый элемент 30. Затем мы объединяем эти две маски с помощью логического оператора & внутри квадратных скобок: [(s > 8) & (s < 30)]. Логический оператор & оценивает условия для каждого элемента и возвращает логическую маску, которая указывает, какие элементы удовлетворяют одновременно обоим условиям.

Другой пример: если нам надо определить, соответствуют значения хотя бы одному из двух условий, то мы можем использовать оператор |:

import pandas as pd

s = pd.Series([1, 2, 3, 5, 8, 13, 21, 34, 55, 89])

# Фильтрация значений меньше 8 ИЛИ больше 30
filtered_data = s[(s < 8) | (s > 30)]

print(filtered_data)

Вывод программы:

0     1
1     2
2     3
3     5
7    34
8    55
9    89
dtype: int64

Здесь для фильтрации объединяем две маски с помощью логического оператора | в квадратных скобках: [(s < 8) | (s > 30)]. Логический оператор | оценивает условия для каждого элемента и возвращает логическую маску, которая указывает, какие элементы удовлетворяют как минимум одному из условий.

Методы фильтрации

Также Pandas предоставляет ряд встроенных методов для фильтрации данных. Рассмотрим некоторые из них.

Метод isin() позволяет проверить, соответствуют ли элементы в Series каким-либо из указанных значений. Этот метод полезен, когда необходимо отфильтровать данные на основе нескольких значений. Например:

import pandas as pd

s = pd.Series(["Tom", "Bob", "Sam", "Kate", "Alex", "Alice"])

# Фильтрация элементов, которые есть в ["Tom", "Rob", "Alice"]
filtered_data = s[s.isin(["Tom", "Rob", "Alice"])]

print(filtered_data)

Здесь метод isin() проверяет, присутствует ли каждый элемент в Series в списке значений ["Tom", "Rob", "Alice"]. В итоге мы получаем только те элементы, которые есть в этом списке.

0      Tom
5    Alice
dtype: object

Еще один полезный метод - метод between() помогает отфильтровать данные, которые располагаются в определенном диапазоне. Например, у нас есть числовой ряд, и нам надо получить числа из диапазона от 8 до 30:

import pandas as pd

s = pd.Series([1, 2, 3, 5, 8, 13, 21, 34, 55, 89])

# Фильтрация значений от 8 до 30 включая
filtered_data = s[s.between(8, 30)]

print(filtered_data)

Результат программы:

4     8
5    13
6    21
dtype: int64
Помощь сайту
Юмани:
410011174743222
Номер карты:
4048415020898850