Как фильтровать pandas dataframe: простые способы
Чтобы отфильтровать pandas dataframe, вы можете использовать метод query() или метод loc[].
Вот примеры использования:
import pandas as pd
# Создание исходного dataframe
data = {'Name': ['John', 'Alice', 'Bob', 'David'],
'Age': [25, 30, 35, 40],
'City': ['New York', 'Paris', 'London', 'Tokyo']}
df = pd.DataFrame(data)
# Фильтрация с использованием метода query()
filtered_df = df.query('Age > 30')
print(filtered_df)
# Фильтрация с использованием метода loc[]
filtered_df = df.loc[df['City'] == 'London']
print(filtered_df)
Детальный ответ
Как фильтровать pandas DataFrame?
Фильтрация DataFrame в pandas - это процесс отбора определенных строк или столбцов на основе заданных условий. Этот процесс позволяет вам работать с нужными данными и упрощает анализ и манипуляцию информацией.
Давайте рассмотрим несколько методов для фильтрации DataFrame в pandas.
1. Фильтрация строк
Один из способов отфильтровать строки DataFrame - использование условий. Допустим, у нас есть DataFrame, содержащий информацию о студентах:
import pandas as pd
data = {'Имя': ['Алексей', 'Мария', 'Иван', 'Елена'],
'Возраст': [18, 20, 19, 21],
'Оценка': [85, 92, 78, 90]}
df = pd.DataFrame(data)
Теперь предположим, что мы хотим отфильтровать только те строки, где возраст студента больше или равен 20 лет. Мы можем использовать оператор сравнения `>=` для создания условия и применить его к столбцу "Возраст" DataFrame:
filtered_df = df[df['Возраст'] >= 20]
Теперь в `filtered_df` содержатся только строки, которые удовлетворяют условию. Мы можем вывести результат, чтобы убедиться в этом:
print(filtered_df)
Вывод:
Имя Возраст Оценка
1 Мария 20 92
3 Елена 21 90
2. Фильтрация столбцов
Если вы хотите выбрать только определенные столбцы DataFrame, вы можете указать их названия в квадратных скобках. Например, давайте выберем только столбцы "Имя" и "Оценка" из DataFrame:
selected_columns = df[['Имя', 'Оценка']]
Теперь в `selected_columns` содержатся только выбранные столбцы. Мы можем вывести результат:
print(selected_columns)
Вывод:
Имя Оценка
0 Алексей 85
1 Мария 92
2 Иван 78
3 Елена 90
3. Комбинированная фильтрация
Часто вам может понадобиться объединить несколько условий для более точной фильтрации. Для этого можно использовать логические операторы `&` (и) и `|` (или). Допустим, мы хотим выбрать только те строки, где возраст студента больше или равен 20 лет, и оценка выше 80:
combined_filter = df[(df['Возраст'] >= 20) & (df['Оценка'] > 80)]
В `combined_filter` теперь содержатся только строки, которые удовлетворяют обоим условиям. Мы можем вывести результат:
print(combined_filter)
Вывод:
Имя Возраст Оценка
1 Мария 20 92
3 Елена 21 90
4. Использование метода `query()`
В pandas также есть метод `query()`, который позволяет указывать условия для фильтрации в виде строки. В этом случае вместо логических операторов `&` и `|` используются ключевые слова `and` и `or`. Например, давайте выберем только строки, где возраст студента больше или равен 20 лет, и оценка выше 80, с использованием метода `query()`:
query_filter = df.query('Возраст >= 20 and Оценка > 80')
В `query_filter` теперь содержатся только строки, которые удовлетворяют условию. Мы можем вывести результат:
print(query_filter)
Вывод:
Имя Возраст Оценка
1 Мария 20 92
3 Елена 21 90
5. Использование метода `isin()`
Метод `isin()` позволяет фильтровать DataFrame по нескольким значениям в столбце. Например, давайте выберем только строки, где имя студента является "Мария" или "Иван":
isin_filter = df[df['Имя'].isin(['Мария', 'Иван'])]
Теперь в `isin_filter` содержатся только строки, в которых имя студента равно "Мария" или "Иван". Мы можем вывести результат:
print(isin_filter)
Вывод:
Имя Возраст Оценка
1 Мария 20 92
2 Иван 19 78
6. Использование отрицания
Если вам нужно выбрать строки, которые НЕ удовлетворяют определенному условию, вы можете использовать оператор `~`. Например, давайте выберем только строки, где возраст студента НЕ больше или равен 20:
not_filter = df[~(df['Возраст'] >= 20)]
Теперь в `not_filter` содержатся только строки, которые НЕ удовлетворяют условию. Мы можем вывести результат:
print(not_filter)
Вывод:
Имя Возраст Оценка
0 Алексей 18 85
2 Иван 19 78
7. Очистка NaN значений
Иногда в DataFrame могут быть NaN (Not a Number) значения, которые могут мешать анализу. Вы можете очистить эти значения с помощью метода `dropna()`. Например:
import numpy as np
data = {'Значение1': [1, 2, np.nan, 4, 5],
'Значение2': [6, np.nan, 8, 9, 10]}
df = pd.DataFrame(data)
cleaned_df = df.dropna()
Теперь `cleaned_df` содержит DataFrame без NaN значений. Мы можем вывести результат:
print(cleaned_df)
Вывод:
Значение1 Значение2
0 1.0 6.0
3 4.0 9.0
4 5.0 10.0
8. Использование метода `query()` для фильтрации NaN значений
Метод `query()` также может использоваться для фильтрации NaN значений в DataFrame. Например, давайте выберем только строки, в которых нет NaN значений:
query_filter = df.query('Значение1 == Значение1 and Значение2 == Значение2')
Теперь в `query_filter` содержатся только строки без NaN значений. Мы можем вывести результат:
print(query_filter)
Вывод:
Значение1 Значение2
0 1.0 6.0
3 4.0 9.0
4 5.0 10.0
Заключение
В данной статье мы рассмотрели различные способы фильтрации DataFrame в pandas. Вы можете использовать условия и логические операторы для фильтрации строк и указывать нужные столбцы DataFrame. Также вы узнали о методах `query()` и `isin()` для более удобной фильтрации. Не забывайте, что вы также можете очищать NaN значения с помощью метода `dropna()`. Надеюсь, эта информация будет полезной для вас!