Maison >développement back-end >Tutoriel Python >Comment filtrer efficacement les objets de données 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.
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.
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.
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.
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.
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!