Введение
Добро пожаловать в лабораторию фильтрации данных с 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.



