Maison >développement back-end >Tutoriel Python >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 ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-20 11:57:30651parcourir

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 :

<code class="python">df.loc[df['col1'] >= 1, 'col1']</code>

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 :

<code class="python">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 :

<code class="python">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 :

<code class="python">filters = {'>=': [1], '<=': [1]}</code>
<code class="python">b1 = b(df, 'col1', ge, 1)
b2 = b(df, 'col1', le, 1)
filtered_df = f(df, b1, b2)</code>

Ce code applique les filtres au 'col1' colonne 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 colonne valides, le code suivant devient possible :

<code class="python">df.query('col1 <= 1 & 1 <= col1')</code>

Cette ligne réalise le même filtrage que notre exemple précédent en 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.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn