Таблицы и обработка данных — неотъемлемая часть анализа данных в Python. Фильтрация данных является ключевым шагом при подготовке и очистке данных перед их анализом или визуализацией. В этой статье мы рассмотрим, зачем может понадобиться фильтрация таблиц и как использовать популярные библиотеки, такие как Pandas и NumPy, для выполнения этой задачи.
Установка необходимых библиотек
Для начала, нам потребуется установить библиотеки Pandas и NumPy. Эти библиотеки предоставляют мощные инструменты для обработки и анализа данных. Установить их можно с помощью pip:
pip install pandas numpy
Создание примерной таблицы
Создание DataFrame — это первый шаг для работы с табличными данными в Pandas. Рассмотрим пример создания DataFrame из словаря:
import pandas as pd
# Создание данных
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
'Age': [24, 27, 22, 32, 29],
'City': ['New York', 'Los Angeles', 'Chicago', 'Houston', 'Phoenix'],
'Salary': [70000, 80000, 55000, 105000, 95000]
}
# Создание DataFrame
df: pd.DataFrame = pd.DataFrame(data)
print(df)
Этот код создает DataFrame с колонками Name, Age, City и Salary, наполненным примерами данных.
Основные методы фильтрации данных с использованием Pandas
Фильтрация по одному условию
Фильтрация данных по одному условию может быть выполнена с помощью логического индексирования. Рассмотрим пример, как отфильтровать всех сотрудников старше 25 лет:
# Фильтрация по одному условию
df_filtered: pd.DataFrame = df[df['Age'] > 25]
print(df_filtered)
Здесь мы создаем новый DataFrame, который содержит только тех сотрудников, возраст которых превышает 25 лет.
Фильтрация по нескольким условиям
Фильтрация по нескольким условиям делает возможным создание более сложных фильтров, используя логические операторы. Например, выберем сотрудников старше 25 лет, получающих более $75,000:
# Фильтрация по нескольким условиям
df_filtered_complex: pd.DataFrame = df[(df['Age'] > 25) & (df['Salary'] > 75000)]
print(df_filtered_complex)
Мы используем операторы & (и) и | (или) для комбинирования условий.
Фильтрация с использованием функции
Использование пользовательской функции для фильтрации позволяет применять более сложную логику. Рассмотрим пример, где мы фильтруем сотрудников с зарплатой, превышающей среднее значение:
def high_salary(salary: float, threshold: float) -> bool:
""" Возвращает True, если зарплата превышает заданный порог. """
return salary > threshold
# Средняя зарплата
average_salary: float = df['Salary'].mean()
# Фильтрация с использованием функции
df_filtered_function: pd.DataFrame = df[df['Salary'].apply(lambda x: high_salary(x, average_salary))]
print(df_filtered_function)
Здесь мы используем метод .apply() для применения функции high_salary к каждому элементу в колонке Salary.
Фильтрация данных на основе значений в определённой колонке
Фильтрация данных на основе значений в определенной колонке позволяет выделить строки, соответствующие конкретным значениям. Например, выберем всех сотрудников из Нью-Йорка:
# Фильтрация по значению в колонке
df_city_filtered: pd.DataFrame = df[df['City'] == 'New York']
print(df_city_filtered)
Мы используем логическое индексирование, чтобы отфильтровать строки, где колонка City равна ‘New York’.
Использование методов .query() и .loc() для фильтрации
Методы .query() и .loc() предоставляют различные синтаксические подходы для выполнения фильтрации. Рассмотрим их на примере:
# Использование .query()
df_query: pd.DataFrame = df.query('Age > 25 & Salary > 75000')
print(df_query)
# Использование .loc()
df_loc: pd.DataFrame = df.loc[(df['Age'] > 25) & (df['Salary'] > 75000)]
print(df_loc)
Метод .query() позволяет использовать строковые выражения, тогда как .loc() использует стандартную синтаксис функции Pandas.
Обработка пустых значений и выбросов
Перед фильтрацией важно учесть наличие пропусков и выбросов в данных. Рассмотрим пример, как это можно сделать:
# Заполнение пустых значений
df_filled: pd.DataFrame = df.fillna({'Salary': df['Salary'].median()})
# Удаление выбросов
df_no_outliers: pd.DataFrame = df_filled[(df_filled['Salary'] >= df_filled['Salary'].quantile(0.05)) &
(df_filled['Salary'] <= df_filled['Salary'].quantile(0.95))]
print(df_no_outliers)
Мы заполняем пустые значения медианой и удаляем выбросы, используя квантильное значение.
Заключение
Фильтрация таблиц в Python является необходимым шагом в процессе обработки и анализа данных. Рассмотренные методы и примеры демонстрируют, как мощные инструменты, такие как Pandas и NumPy, могут упростить этот процесс. Обучаясь и экспериментируя с различными подходами, вы сможете эффективно и качественно обрабатывать свои данные.
Дополнительные ресурсы
Для дальнейшего углубления в тему рекомендую следующие ресурсы:
- Документация Pandas
- Документация NumPy
- Курс по анализу данных с использованием Pandas на Coursera
- Видео-обзоры по Pandas на YouTube
Направляйтесь в мир анализа данных с уверенностью, используя эти ресурсы и применяя методы фильтрации данных в своих проектах.