Introduction
La librairie Python Pandas est sans aucun doute parmi les plus utiliser pour manipuler et transformer vos données. La librairie Pandas fait partie des librairies fondamentales pour les ingénieurs de données. Elle offrent des outils puissants pour manipuler vos données.
Filtrer les lignes d’un DataFrame est une des opérations les plus courantes. Cette opération consiste à sélectionner les lignes d’un DataFrame sur la base de critères spécifiques.
Dans cet article, nous allons discuter de trois façons de filtrer les données d’un DataFrame en utilisant les valeurs d’une colonne.
Jeu de Données
Pour cet article, on vous propose de construire un jeu de données qui sera utilisé pour les illustrations des différentes méthodes pour filtrer un DataFrame.
import pandas as pd
df = pd.DataFrame({'id': [1, 2, 3, 4, 5, 6],
'nom': ['Pierre', 'Paul', 'Emma', 'Lisa', 'John', 'Eve'],
'salaire': [20000, 25000, 30000, 24000, 35000, 21000]})
Aperçu du jeu de données utilisé dans cet article :
+----+------+--------+-----------+
| | id | nom | salaire |
|----+------+--------+-----------|
| 0 | 1 | Pierre | 20000 |
| 1 | 2 | Paul | 25000 |
| 2 | 3 | Emma | 30000 |
| 3 | 4 | Lisa | 24000 |
| 4 | 5 | John | 35000 |
| 5 | 6 | Eve | 21000 |
+----+------+--------+-----------+
Notre objectif est de filtrer les lignes sur les salaires strictement supérieur à 20 000 € et inférieur ou égale à 25 000€ (20000 < salaire <= 25000
). Vous pourrez vérifier par la suite que les lignes répondant à cette condition sont les suivantes :
+----+------+-------+-----------+
| | id | nom | salaire |
|----+------+-------+-----------|
| 1 | 2 | Paul | 25000 |
| 3 | 4 | Lisa | 24000 |
| 5 | 6 | Eve | 21000 |
+----+------+-------+-----------+
Opérateurs Logiques
La première de ces approches consiste à utiliser les opérateurs logiques. Ces opérateurs disponibles dans Pandas permettent d’appliquer des opérations de logiques sur les Series et de chaîner les conditions ensemble. La condition qui en résulte est alors appliquée sur le DataFrame à filtrer.
Pour filtrer le DataFrame df sur les salaires, on peut écrire l’instruction suivante:
df[(df['salaire'] > 20000) & (df['salaire'] <= 25000)]
Les deux conditions sur les bornes du salaire sont écrites avec les opérateurs de comparaisons (<
et <=
) et groupées entre des parenthèses. Les conditions sur la borne inférieur et supérieur du salaire sont liées par l’opérateur &
(and
).
Consulter la documentation officielle pour une présentation détaillée du filtrage s’appuyant sur les opérateurs logiques et l’algèbre booléenne.
DataFrame – Méthode query()
La méthode query() permet de requêter directement sur le DataFrame. La syntaxe générale de cette méthode est la suivante :
dataframe.query(expression, inplace)
Les paramètres sont les suivants :
Paramètres | Valeurs | Description |
---|---|---|
expression | Requis. Requête sous forme de string à appliquer | |
inplace | True | False | Optionnel. Booléen qui permet d’indiquer si l’on souhaite modifier le DataFrame original (True ) ou retourner une copie (False ) – Par défaut: False |
Dans l’exemple traité dans cet article, le filtre sur les salaires s’écrit comme:
df.query("salaire > 20000 & salaire <= 25000")
On voit que la condition sur les salaire est représenté par la string : "salaire > 20000 & salaire <= 25000"
. Cette condition est similaire à celle utilisée précédemment tout en rendant la lecture du code plus lisible.
Consultez la documentation officielle sur la méthode query() pour une présentation détaillée.
Series – Méthode between()
La méthode between() va s’appliquer sur la Series sur laquelle on souhaite appliquer un filtre. Et c’est le résultat sur la Series que l’on va appliquer sur le Datarame pour le filtrer. La syntaxe générale de cette méthode est la suivante :
series.between(left, right, inclusive)
Paramètre | Valeur | Description |
---|---|---|
left | Borne de gauche | |
right | Borne de droite | |
inclusive | both | neither | left | right | Indique si les bornes de gauche et/ou de droite sont incluses (‘both’ par défaut) |
Dans l’exemple traité dans cet article, le filtre sur les salaires s’écrit alors comme:
df[df['salaire'].between(20000, 25000, inclusive='right')]
Dans cet exemple, le paramètre inclusive a été mis à ‘right‘ car seule la borne de droite doit être incluse. On voit ici que le filtre est fait sur la colonne ‘salaire‘ (df['salaire']
) contrairement à la méthode query() qui s’applique directement sur le DataFrame.
Consultez la documentation officielle sur la méthode between() pour une présentation détaillée.
Conclusion
Nous avons présenté trois méthodes pour filtrer un DataFrame Pandas en se basant sur les valeurs d’une colonne. Les trois méthodes pour filtrer les lignes d’un DataFrame df sont résumées ici :
Version | Code |
---|---|
Opérateurs logiques | df[(df['salaire'] > 20000) & (df['salaire'] <= 25000)] |
Méthode query() | df.query("salaire > 20000 & salaire <= 25000") |
Méthode between() | df[df['salaire'].between(20000, 25000, inclusive='right')] |
Les trois méthodes conduisent aux mêmes résultats. La raison qui conduit à utiliser une méthode plutôt qu’une autre est d’améliorer la lisibilité de votre code Python. Et pour cela, les méthodes query() et between() sont à privilégier.
Référence
Les références ayant servi à la rédaction de cet article: