"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment filtrer efficacement les objets de données Pandas à l'aide de l'indexation booléenne ?

Comment filtrer efficacement les objets de données Pandas à l'aide de l'indexation booléenne ?

Publié le 2024-11-01
Parcourir:534

How to Efficiently Filter Pandas Data Objects Using Boolean Indexing?

Filtrage efficace des trames de données et des séries Pandas à l'aide de l'indexation booléenne

Dans les scénarios d'analyse de données, l'application de plusieurs filtres pour affiner les résultats est souvent cruciale. Cet article vise à aborder une approche efficace pour enchaîner plusieurs opérations de comparaison sur des objets de données Pandas.

Le défi

L'objectif est de traiter un dictionnaire d'opérateurs relationnels et de les appliquer de manière additive à un Pandas donné. Series ou DataFrame, résultant en un ensemble de données filtré. Cette opération nécessite de minimiser la copie inutile des données, en particulier lorsqu'il s'agit de grands ensembles de données.

Solution : indexation booléenne

Pandas fournit un mécanisme très efficace pour filtrer les données à l'aide de l'indexation booléenne. L'indexation booléenne implique la création de conditions logiques, puis l'indexation des données à l'aide de ces conditions. Prenons l'exemple suivant :

df.loc[df['col1'] >= 1, 'col1']

Cette ligne de code sélectionne toutes les lignes du DataFrame df où la valeur dans la colonne 'col1' est supérieure ou égale à 1. Le résultat est un nouvel objet Series contenant les valeurs filtrées.

Pour appliquer plusieurs filtres, nous pouvons combiner des conditions booléennes à l'aide d'opérateurs logiques comme & (et) et | (ou). Par exemple :

df[(df['col1'] >= 1) & (df['col1'] <= 1)]

Cette opération filtre les lignes où 'col1' est à la fois supérieur ou égal à 1 et inférieur ou égal à 1.

Fonctions d'assistance

Pour simplifier le processus d'application de plusieurs filtres, nous pouvons créer des fonctions d'assistance :

def b(x, col, op, n): 
    return op(x[col], n)

def f(x, *b):
    return x[(np.logical_and(*b))]

La fonction b crée une condition booléenne pour une colonne et un opérateur donnés, tandis que f applique plusieurs conditions booléennes à un DataFrame ou une série.

Exemple d'utilisation

Pour utiliser ces fonctions, nous pouvons fournir un dictionnaire de critères de filtrage :

filters = {'>=': [1], '
b1 = b(df, 'col1', ge, 1)
b2 = b(df, 'col1', le, 1)
filtered_df = f(df, b1, b2)

Ce code applique les filtres à la colonne 'col1' dans le DataFrame df et renvoie un nouveau DataFrame avec les résultats filtrés.

Fonctionnalité améliorée

Pandas 0.13 a introduit la méthode de requête, qui offre un moyen pratique d'appliquer des filtres à l'aide d'expressions de chaîne. Pour les identifiants de colonnes valides, le code suivant devient possible :

df.query('col1 

Cette ligne réalise le même filtrage que notre exemple précédent utilisant une syntaxe plus concise.

En utilisant l'indexation booléenne et les fonctions d'assistance, nous pouvons appliquer efficacement plusieurs filtres aux trames de données et aux séries Pandas. Cette approche minimise la copie des données et améliore les performances, en particulier lorsque vous travaillez avec de grands ensembles de données.

Déclaration de sortie Cet article est réimprimé à l'adresse : 1729395079. En cas d'infraction, veuillez contacter [email protected] pour le supprimer.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3