"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como filtrar com eficiência objetos de dados do Pandas usando indexação booleana?

Como filtrar com eficiência objetos de dados do Pandas usando indexação booleana?

Publicado em 01/11/2024
Navegar:407

How to Efficiently Filter Pandas Data Objects Using Boolean Indexing?

Filtragem eficiente de dataframes e séries do Pandas usando indexação booleana

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 Desafio

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.

Solução: indexação booleana

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.

Funções auxiliares

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.

Exemplo de uso

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.

Declaração de lançamento Este artigo foi reimpresso em: 1729395079 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

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