Фильтрация данных в Pandas

PandasBeginner
Практиковаться сейчас

Введение

Добро пожаловать в лабораторию фильтрации данных с Pandas! Фильтрация данных является одной из самых распространенных и важных задач в анализе данных. Она позволяет выбрать подмножество ваших данных, соответствующее определенным критериям, что дает возможность сосредоточиться на информации, наиболее релевантной вашему анализу.

Pandas — это мощная библиотека Python для манипулирования и анализа данных. Ее основная структура данных, DataFrame, представляет собой двумерную таблицу данных с строками и столбцами. В этой лаборатории вы изучите несколько фундаментальных методов фильтрации строк из Pandas DataFrame. Мы рассмотрим:

  • Фильтрацию с одним булевым условием.
  • Объединение нескольких условий с использованием логических операторов.
  • Использование метода isin() для сопоставления нескольких значений.
  • Удаление строк с пропущенными данными (NaN).
  • Подсчет результатов отфильтрованных данных.

К концу этой лаборатории вы получите прочную основу для выбора и изоляции данных в ваших проектах с Pandas.

Фильтрация строк по булевому условию

На этом шаге вы изучите самый базовый метод фильтрации: булево индексирование. Этот метод включает создание булевого условия, которое возвращает Pandas Series со значениями True и False. Когда вы передаете этот Series в DataFrame, он возвращает только те строки, где значение равно True.

Начнем с фильтрации нашего DataFrame, чтобы найти всех сотрудников старше 30 лет.

Сначала откройте файл main.py в редакторе слева. Файл уже содержит пример DataFrame.

Теперь замените существующие операторы print в нижней части main.py следующим кодом. Этот код создает булево условие df['Age'] > 30 и использует его для фильтрации DataFrame.

## Фильтр для сотрудников старше 30 лет
older_than_30 = df[df['Age'] > 30]

print("Сотрудники старше 30 лет:")
print(older_than_30)

Ваш полный файл main.py теперь должен выглядеть так:

import pandas as pd
import numpy as np

## Создание примерного DataFrame
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve', 'Frank'],
    'Department': ['HR', 'HR', 'Sales', 'IT', 'IT', 'Finance'],
    'Age': [25, 45, 38, 52, 29, 33],
    'Salary': [50000, 80000, 75000, 95000, 62000, np.nan]
}

df = pd.DataFrame(data)

## Фильтр для сотрудников старше 30 лет
older_than_30 = df[df['Age'] > 30]

print("Сотрудники старше 30 лет:")
print(older_than_30)

Теперь давайте запустим скрипт. Откройте терминал и выполните следующую команду:

python3 main.py

Вы должны увидеть следующий вывод, который перечисляет только тех сотрудников, чей возраст больше 30 лет.

Сотрудники старше 30 лет:
      Name Department  Age   Salary
1      Bob         HR   45  80000.0
2  Charlie      Sales   38  75000.0
3    David         IT   52  95000.0
5    Frank    Finance   33      NaN

Комбинирование фильтров с использованием оператора &

На этом шаге мы объединим несколько условий для выполнения более сложной фильтрации. Вы можете объединять булевы условия, используя логические операторы. Наиболее распространенными являются & для И (AND) и | для ИЛИ (OR).

Важное правило синтаксиса заключается в том, что каждое условие должно быть заключено в скобки (), из-за приоритета операторов в Python.

Давайте отфильтруем DataFrame, чтобы найти сотрудников, которые работают в отделе 'IT' и старше 30 лет.

Измените ваш файл main.py. Замените код фильтрации из предыдущего шага новым кодом ниже.

## Фильтр для сотрудников из IT старше 30 лет
it_and_older = df[(df['Department'] == 'IT') & (df['Age'] > 30)]

print("Сотрудники из IT старше 30 лет:")
print(it_and_older)

Обратите внимание, как каждое условие, df['Department'] == 'IT' и df['Age'] > 30, заключено в свои собственные скобки.

Сохраните файл main.py и запустите его из терминала:

python3 main.py

Вывод покажет только тех сотрудников, которые удовлетворяют обоим условиям. В нашем наборе данных этому критерию соответствует только Дэвид.

Сотрудники из IT старше 30 лет:
    Name Department  Age   Salary
3  David         IT   52  95000.0

Использование метода isin для сопоставления значений

На этом шаге вы узнаете, как фильтровать строки, где значение столбца соответствует одному из нескольких возможных значений. Хотя вы могли бы использовать несколько условий | (ИЛИ), более эффективным и читаемым способом является использование метода isin(). Этот метод принимает список значений и возвращает True для каждой строки, где значение столбца присутствует в этом списке.

Найдем всех сотрудников, которые работают либо в отделах 'HR', либо в 'Finance'.

Обновите логику фильтрации в вашем файле main.py следующим кодом:

## Фильтр для сотрудников из HR или Finance
hr_or_finance = df[df['Department'].isin(['HR', 'Finance'])]

print("Сотрудники из HR или Finance:")
print(hr_or_finance)

Здесь isin(['HR', 'Finance']) проверяет, какие строки в столбце Department имеют значение 'HR' или 'Finance'.

Сохраните файл и выполните скрипт в терминале:

python3 main.py

Вывод отобразит всех сотрудников из указанных отделов.

Сотрудники из HR или Finance:
    Name Department  Age   Salary
0  Alice         HR   25  50000.0
1    Bob         HR   45  80000.0
5  Frank    Finance   33      NaN

Фильтрация с помощью notnull для удаления NaN

На этом шаге мы рассмотрим, как обрабатывать отсутствующие данные. В Pandas отсутствующие значения обычно представлены как NaN (Not a Number). Часто бывает необходимо отфильтровать строки, содержащие эти отсутствующие значения, перед выполнением вычислений.

Метод notnull() возвращает булеву серию (boolean Series), которая имеет значение True для не отсутствующих значений и False для отсутствующих (NaN) значений. Вы можете использовать это, чтобы легко удалить строки с NaN в определенном столбце.

Отфильтруем наш DataFrame, чтобы увидеть только тех сотрудников, по которым у нас есть информация о зарплате.

Измените файл main.py, чтобы использовать метод notnull() для столбца Salary.

## Фильтр строк с отсутствующей зарплатой
valid_salary = df[df['Salary'].notnull()]

print("Сотрудники с действительной информацией о зарплате:")
print(valid_salary)

Этот код выберет все строки, где столбец Salary не содержит NaN.

Сохраните файл и запустите скрипт из терминала:

python3 main.py

Как вы можете видеть в выводе, Фрэнк, у которого зарплата была NaN, был исключен из результата.

Сотрудники с действительной информацией о зарплате:
      Name Department  Age   Salary
0    Alice         HR   25  50000.0
1      Bob         HR   45  80000.0
2  Charlie      Sales   38  75000.0
3    David         IT   52  95000.0
4      Eve         IT   29  62000.0

Подсчет отфильтрованных строк с помощью функции len

На этом заключительном шаге вы узнаете, как подсчитать количество строк в отфильтрованном DataFrame. После применения фильтра часто требуется узнать, сколько строк соответствует вашим критериям. Простой способ сделать это — использовать встроенную функцию Python len(), которая возвращает количество строк в DataFrame.

Отфильтруем всех сотрудников из отдела 'IT' и затем подсчитаем их.

Обновите ваш файл main.py следующим кодом. Сначала мы отфильтруем DataFrame, а затем передадим полученный отфильтрованный DataFrame в функцию len().

## Фильтр для сотрудников из отдела IT
it_employees = df[df['Department'] == 'IT']

## Подсчет количества сотрудников IT
num_it_employees = len(it_employees)

print(f"Количество сотрудников в IT: {num_it_employees}")

Этот код сначала создает новый DataFrame it_employees, содержащий только строки для отдела IT. Затем он вычисляет длину этого нового DataFrame и выводит форматированную строку с результатом.

Сохраните файл и запустите скрипт:

python3 main.py

Вывод будет представлять собой одну строку, сообщающую вам количество.

Количество сотрудников в IT: 2

Резюме

Поздравляем с завершением лабораторной работы по фильтрации данных с помощью Pandas!

В этой лабораторной работе вы изучили и отработали основные методы выбора подмножеств данных из Pandas DataFrame. Вы рассмотрели:

  • Булеву индексацию (Boolean Indexing): Фильтрация данных на основе одного условия (например, df[df['Age'] > 30]).
  • Комбинирование фильтров: Использование оператора & (И) для одновременного применения нескольких условий, не забывая заключать каждое условие в скобки.
  • Сопоставление значений с помощью isin(): Эффективная фильтрация строк, где значение столбца совпадает с любым значением из заданного списка.
  • Обработка отсутствующих данных: Использование метода notnull() для удаления строк со значениями NaN.
  • Подсчет отфильтрованных строк: Использование функции len() для получения количества строк в отфильтрованном DataFrame.

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