ConsigneFiltre un DataFrame avec des conditions complexes
Filtrer un DataFrame avec plusieurs conditions est un cas extrêmement courant. Rappel des outils.
df[df['dept'] == 'Tech']df[df['salaire'] > 50000]& ET| OU~ NONParenthèses obligatoires :
df[(df['salaire'] > 50000) & (df['experience'] > 3)] ✅
df[df['salaire'] > 50000 & df['experience'] > 3] ❌ priorité de &
Dans un masque, jamais and / or / not (ce sont des opérateurs sur les booléens, pas sur les Series). À l'intérieur d'un .query(), au contraire, ce sont eux qu'on écrit (voir plus bas).
df[df['dept'].isin(['Tech', 'Finance'])] 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()]Alternative parfois plus lisible quand les noms sont simples :
df.query('salaire > 50000 and experience > 3')df.query('dept in ["Tech", "Finance"]')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.
Envie d'aller plus loin ? Découvrez nos formations certifiées Bac+2 à Bac+5 →