Exercice 66 / 100

Pandas — Filtrage avancé

Filtre un DataFrame avec des conditions complexes

Filtrer un DataFrame avec plusieurs conditions est un cas extrêmement courant. Rappel des outils.

Une condition simple

df[df['dept'] == 'Tech'] df[df['salaire'] > 50000]

Plusieurs conditions

& ET | OU ~ NON

Parenthèses obligatoires :

df[(df['salaire'] > 50000) & (df['experience'] > 3)] ✅

df[df['salaire'] > 50000 & df['experience'] > 3] ❌ priorité de &

Jamais and / or / not (ce sont des opérateurs sur les booléens, pas sur les Series).

Méthodes utiles

.isin([...])
valeur dans la liste
df[df['dept'].isin(['Tech', 'Finance'])]
.between(a, b)
entre a et b (inclusif par défaut)
df[df['salaire'].between(40000, 60000)]
.str.contains('motif') pour les colonnes texte (regex possible) df[df['email'].str.contains('@beauvoir', na=False)]
.str.startswith('A') .str.endswith('.com')
.isna() / .notna() NaN ou pas df[df['salaire'].notna()]
À chaque forme de recherche sa méthode toute faite : une liste de valeurs avec isin, un intervalle avec between, un motif de texte avec str.contains, et notna pour ne garder que ce qui est rempli

.query() : syntaxe en string

Alternative parfois plus lisible quand les noms sont simples :

df.query('salaire > 50000 and experience > 3') df.query('dept in ["Tech", "Finance"]')

Exemple complet

df = pd.DataFrame({ 'employe': ['Alice','Bob','Charlie','Diana','Eve'], 'dept': ['Tech','RH','Tech','Finance','Tech'], 'salaire': [55000, 42000, 62000, 58000, 47000], 'experience':[3, 5, 8, 4, 2] })
tech = df[df['dept'] == 'Tech'] seniors = df[(df['salaire'] > 50000) & (df['experience'] > 3)] multi = df[df['dept'].isin(['Tech','Finance'])]

.str.contains et .isin sont les deux méthodes les plus puissantes pour filtrer du texte ou des catégories sans écrire d'expressions à rallonge.

exercise.py

Envie d'aller plus loin ? Découvrez nos formations certifiées Bac+2 à Bac+5 →