Em cenários de análise de dados, aplicar vários filtros para restringir os resultados costuma ser crucial. Este artigo tem como objetivo abordar uma abordagem eficiente para encadear múltiplas operações de comparação em objetos de dados Pandas.
O objetivo é processar um dicionário de operadores relacionais e aplicá-los aditivamente a um determinado Pandas Series ou DataFrame, resultando em um conjunto de dados filtrado. Esta operação requer a minimização de cópias desnecessárias de dados, especialmente ao lidar com grandes conjuntos de dados.
Pandas fornece um mecanismo altamente eficiente para filtrar dados usando indexação booleana. A indexação booleana envolve a criação de condições lógicas e a indexação dos dados usando essas condições. Considere o seguinte exemplo:
df.loc[df['col1'] >= 1, 'col1']
Esta linha de código seleciona todas as linhas no DataFrame df onde o valor na coluna 'col1' é maior ou igual a 1. O resultado é um novo objeto Series contendo os valores filtrados.
Para aplicar vários filtros, podemos combinar condições booleanas usando operadores lógicos como & (e) e | (ou). Por exemplo:
df[(df['col1'] >= 1) & (df['col1'] <= 1)]
Esta operação filtra linhas onde 'col1' é maior ou igual a 1 e menor ou igual a 1.
Para simplificar o processo de aplicação de vários filtros, podemos criar funções auxiliares:
def b(x, col, op, n):
return op(x[col], n)
def f(x, *b):
return x[(np.logical_and(*b))]
A função b cria uma condição booleana para uma determinada coluna e operador, enquanto f aplica várias condições booleanas a um DataFrame ou Série.
Para usar essas funções, podemos fornecer um dicionário de critérios de filtro:
filters = {'>=': [1], 'b1 = b(df, 'col1', ge, 1)
b2 = b(df, 'col1', le, 1)
filtered_df = f(df, b1, b2)
Este código aplica os filtros à coluna 'col1' no DataFrame df e retorna um novo DataFrame com os resultados filtrados.
Funcionalidade aprimorada
Pandas 0.13 introduziu o método de consulta, que oferece uma maneira conveniente de aplicar filtros usando expressões de string. Para identificadores de coluna válidos, o seguinte código se torna possível:
df.query('col1 Esta linha atinge a mesma filtragem que nossa exemplo anterior usando uma sintaxe mais concisa.
Ao utilizar indexação booleana e funções auxiliares, podemos aplicar com eficiência vários filtros a dataframes e séries do Pandas. Essa abordagem minimiza a cópia de dados e melhora o desempenho, especialmente ao trabalhar com grandes conjuntos de dados.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3