Pandas — это мощная библиотека Python для обработки и анализа данных. Распространенная задача включает выбор строк из DataFrame на основе условий, примененных к определенным столбцам. В этой статье рассматриваются три эффективных метода получения индексов строк, удовлетворяющих заданному критерию.
Содержание
- Индексирование по булеву выражению: простой и эффективный подход
- Использование
np.where()
из NumPy для гибкости - Использование
query()
из Pandas для читаемых сложных запросов
Индексирование по булеву выражению: простой и эффективный подход
Индексирование по булеву выражению предлагает краткое и эффективное решение для простых критериев отбора. Оно напрямую использует истинность условия для фильтрации строк.
Проиллюстрируем на примере:
import pandas as pd
data = {'col1': [1, 2, 3, 4, 5],
'col2': [6, 7, 8, 9, 10],
'col3': ['A', 'B', 'C', 'D', 'E']}
df = pd.DataFrame(data)
print(df)
# Получение индексов, где 'col1' больше 2
indices = df[df['col1'] > 2].index.tolist()
print(indices) # Вывод: [2, 3, 4]
Этот код сначала создает булеву маску (df['col1'] > 2
), затем использует ее для фильтрации DataFrame и, наконец, извлекает индексы выбранных строк с помощью .index.tolist()
.
Использование np.where()
из NumPy для гибкости
Функция np.where()
из NumPy обеспечивает более универсальный подход, особенно полезный для сложных условий или нескольких одновременных условий.
import numpy as np
indices = np.where(df['col1'] > 2)[0].tolist()
print(indices) # Вывод: [2, 3, 4]
np.where(df['col1'] > 2)
возвращает кортеж; первый элемент содержит массив индексов, удовлетворяющих условию. Мы получаем доступ к этому элементу с помощью [0]
и преобразуем его в список с помощью .tolist()
.
Использование query()
из Pandas для читаемых сложных запросов
Метод query()
повышает читаемость, особенно для сложных условий. Он позволяет указывать критерии с помощью строковых выражений.
indices = df.query('col1 > 2').index.tolist()
print(indices) # Вывод: [2, 3, 4]
# Пример с несколькими условиями
indices = df.query('col1 > 2 and col2 < 9').index.tolist()
print(indices) # Вывод: [2]
Метод query()
напрямую принимает строковое представление условия, значительно улучшая читаемость, особенно при наличии нескольких или сложных условий.
Заключение: Каждый метод эффективно извлекает индексы на основе условия. Индексирование по булеву выражению лучше всего подходит для простых условий; np.where()
обрабатывает более сложные сценарии; а query()
превосходит по читаемости при расширенной фильтрации.