Pandas é uma poderosa biblioteca Python para manipulação e análise de dados. Uma tarefa comum envolve selecionar linhas de um DataFrame com base em condições aplicadas a colunas específicas. Este artigo explora três métodos eficientes para recuperar os índices das linhas que atendem a um critério determinado.
Sumário
- Indexação Booleana: Uma Abordagem Simples e Eficiente
- Aproveitando o
np.where()
do NumPy para Flexibilidade - Usando o
query()
do Pandas para Consultas Complexas Legíveis
Indexação Booleana: Uma Abordagem Simples e Eficiente
A indexação booleana oferece uma solução concisa e eficiente para critérios de seleção simples. Ela aproveita diretamente a veracidade de uma condição para filtrar linhas.
Vamos ilustrar com um exemplo:
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)
# Obter índices onde 'col1' é maior que 2
indices = df[df['col1'] > 2].index.tolist()
print(indices) # Saída: [2, 3, 4]
Este código primeiro cria uma máscara booleana (df['col1'] > 2
), depois a usa para filtrar o DataFrame e, finalmente, extrai os índices das linhas selecionadas usando .index.tolist()
.
Aproveitando o np.where()
do NumPy para Flexibilidade
A função np.where()
do NumPy fornece uma abordagem mais versátil, particularmente benéfica para condições complexas ou múltiplas condições simultâneas.
import numpy as np
indices = np.where(df['col1'] > 2)[0].tolist()
print(indices) # Saída: [2, 3, 4]
np.where(df['col1'] > 2)
retorna uma tupla; o primeiro elemento contém um array de índices que satisfazem a condição. Acessamos este elemento usando [0]
e o convertemos para uma lista usando .tolist()
.
Usando o query()
do Pandas para Consultas Complexas Legíveis
O método query()
melhora a legibilidade, especialmente para condições intrincadas. Ele permite especificar critérios usando expressões de string.
indices = df.query('col1 > 2').index.tolist()
print(indices) # Saída: [2, 3, 4]
#Exemplo com múltiplas condições
indices = df.query('col1 > 2 and col2 < 9').index.tolist()
print(indices) # Saída: [2]
O método query()
aceita diretamente uma representação de string da condição, melhorando significativamente a legibilidade, particularmente com condições múltiplas ou complexas.
Conclusão: Cada método recupera efetivamente índices com base em uma condição. A indexação booleana é melhor para condições simples; np.where()
lida com cenários mais complexos; e query()
se destaca na legibilidade para filtragem avançada.