Фильтрация данных и использование условий

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

Фильтрация данных по условиям

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

Вы можете фильтровать строки DataFrame, используя логические условия:

import pandas as pd

# Создание DataFrame
df = pd.DataFrame({
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [25, 30, 35],
    'City': ['New York', 'Los Angeles', 'Chicago']
})

# Фильтрация по одному условию
adults = df[df['Age'] > 30]
print(adults)

В этом примере строки, где возраст больше 30, будут выбраны.

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

Вы можете комбинировать несколько условий с помощью логических операторов & (и), | (или), ~ (не):

# Фильтрация по нескольким условиям
filtered_df = df[(df['Age'] > 25) & (df['City'] == 'New York')]
print(filtered_df)

Использование функций для фильтрации

Вы можете использовать функции для фильтрации данных:

# Функция для фильтрации
def is_older_than_30(age):
    return age > 30

# Применение функции к столбцу
filtered_df = df[df['Age'].apply(is_older_than_30)]
print(filtered_df)

Фильтрация по строкам и столбцам

Фильтрация строк

Фильтрация строк выполняется с помощью логических условий, как показано выше.

Фильтрация столбцов

Для фильтрации столбцов вы можете использовать списки или условия:

# Выбор только столбцов, которые содержат 'Age'
selected_columns = df.filter(like='Age')
print(selected_columns)

Использование query() для фильтрации

Метод query() позволяет фильтровать данные, используя строковые выражения, что может быть удобнее для сложных условий:

# Фильтрация с помощью query
filtered_df = df.query('Age > 25 and City == "New York"')
print(filtered_df)

Работа с пропущенными значениями

Для фильтрации данных с пропущенными значениями используйте методы isna() или notna():

# Создание DataFrame с пропущенными значениями
df = pd.DataFrame({
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [25, None, 35],
    'City': ['New York', 'Los Angeles', None]
})

# Фильтрация строк с пропущенными значениями в столбце 'Age'
missing_age = df[df['Age'].isna()]
print(missing_age)

# Фильтрация строк без пропущенных значений в столбце 'City'
non_missing_city = df[df['City'].notna()]
print(non_missing_city)

Фильтрация данных по диапазону значений

Вы можете фильтровать данные, находящиеся в заданном диапазоне:

# Фильтрация данных по диапазону значений
age_range = df[(df['Age'] >= 25) & (df['Age'] <= 35)]
print(age_range)

Фильтрация с использованием loc и iloc

Методы loc и iloc также можно использовать для фильтрации данных:

Использование loc:

# Фильтрация с использованием loc
filtered_df = df.loc[df['Age'] > 25]
print(filtered_df)

Использование iloc:

# Фильтрация с использованием iloc
# Выбор первых двух строк
subset_df = df.iloc[:2]
print(subset_df)

Пример полного кода

Вот полный пример кода, показывающий различные методы фильтрации данных:

import pandas as pd

# Создание DataFrame
df = pd.DataFrame({
    'Name': ['Alice', 'Bob', 'Charlie', 'David'],
    'Age': [25, 30, 35, 40],
    'City': ['New York', 'Los Angeles', 'Chicago', 'New York']
})

# Фильтрация по одному условию
adults = df[df['Age'] > 30]
print('Adults:\n', adults)

# Фильтрация по нескольким условиям
filtered_df = df[(df['Age'] > 25) & (df['City'] == 'New York')]
print('\nFiltered by Age > 25 and City == "New York":\n', filtered_df)

# Фильтрация с использованием query
query_filtered = df.query('Age > 30 and City == "New York"')
print('\nFiltered using query:\n', query_filtered)

# Фильтрация данных с пропущенными значениями
df_with_nan = pd.DataFrame({
    'Name': ['Alice', 'Bob', 'Charlie', 'David'],
    'Age': [25, None, 35, None],
    'City': ['New York', 'Los Angeles', None, 'New York']
})
missing_age = df_with_nan[df_with_nan['Age'].isna()]
print('\nRows with missing Age:\n', missing_age)

non_missing_city = df_with_nan[df_with_nan['City'].notna()]
print('\nRows without missing City:\n', non_missing_city)

# Фильтрация по диапазону значений
age_range = df[(df['Age'] >= 25) & (df['Age'] <= 35)]
print('\nAge between 25 and 35:\n', age_range)

Заключение

Фильтрация данных в Pandas позволяет эффективно извлекать и анализировать нужные подмножества данных. Использование условий, функций, методов query(), и работы с пропущенными значениями предоставляет гибкость для работы с различными типами данных и сценариями.

Last updated