OUJOOD.COM
Filtrer avec une condition simple
La syntaxe de base : vous écrivez une condition entre crochets. Pandas l'évalue ligne par ligne et ne retourne que les lignes où elle est vraie. Le résultat est toujours un DataFrame.
import pandas as pd
data = {
"nom": ["Alice", "Bob", "Clara", "David", "Eva"],
"âge": [28, 34, 22, 45, 31],
"département":["RH", "Tech", "Tech", "Finance", "RH"],
"salaire": [2800, 3500, 2200, 4100, 2950]
}
df = pd.DataFrame(data)
# Lignes où l'âge est supérieur à 30
print(df[df["âge"] > 30])
# Lignes où le département est exactement "Tech"
print(df[df["département"] == "Tech"])
# Lignes où le salaire est inférieur ou égal à 3000
print(df[df["salaire"] <= 3000])
df[df["âge"] > 30] produit d'abord un masque booléen — une Series de True/False pour chaque ligne — puis le passe au DataFrame qui ne retient que les lignes True. Vous pouvez stocker ce masque dans une variable et le réutiliser : masque = df["âge"] > 30, puis df[masque].
Combiner plusieurs conditions
Pour combiner des conditions, Pandas utilise & (ET), | (OU) et ~ (NON). Chaque condition doit être entre parenthèses — sans ça, Python évalue dans le mauvais ordre et lève une erreur.
import pandas as pd
data = {
"nom": ["Alice", "Bob", "Clara", "David", "Eva"],
"âge": [28, 34, 22, 45, 31],
"département": ["RH", "Tech", "Tech", "Finance", "RH"],
"salaire": [2800, 3500, 2200, 4100, 2950]
}
df = pd.DataFrame(data)
# ET : département Tech ET salaire > 3000
print(df[(df["département"] == "Tech") & (df["salaire"] > 3000)])
# OU : âge < 25 OU salaire > 4000
print(df[(df["âge"] < 25) | (df["salaire"] > 4000)])
# NON : tout sauf les RH
print(df[~(df["département"] == "RH")])
N'utilisez jamais and, or et not à la place de &, | et ~. Ces mots-clés Python ne fonctionnent pas sur des Series et lèvent une ValueError. Le & et le | sont les opérateurs bit à bit qui, appliqués à des Series booléennes, font exactement ce qu'on attend.
Filtrer avec isin() et between()
Quand vous devez filtrer sur une liste de valeurs précises, isin() est plus lisible qu'une longue chaîne de conditions OR. between() teste si une valeur est dans un intervalle fermé.
import pandas as pd
data = {
"nom": ["Alice", "Bob", "Clara", "David", "Eva"],
"âge": [28, 34, 22, 45, 31],
"département": ["RH", "Tech", "Tech", "Finance", "RH"],
"salaire": [2800, 3500, 2200, 4100, 2950]
}
df = pd.DataFrame(data)
# isin() : lignes dont le département est RH ou Finance
print(df[df["département"].isin(["RH", "Finance"])])
# ~isin() : tout sauf ces départements
print(df[~df["département"].isin(["RH", "Finance"])])
# between() : âge entre 25 et 35 inclus
print(df[df["âge"].between(25, 35)])
between(25, 35) est équivalent à (df["âge"] >= 25) & (df["âge"] <= 35) mais beaucoup plus compact. Les deux bornes sont incluses par défaut. Combiner ~ avec isin() est le moyen le plus propre d'exclure une liste de valeurs.
Filtrer avec query()
query() accepte une condition écrite comme une chaîne de caractères. La syntaxe est proche du SQL et souvent plus lisible pour les conditions complexes — pas besoin de répéter df ni d'enchaîner des crochets.
import pandas as pd
data = {
"nom": ["Alice", "Bob", "Clara", "David", "Eva"],
"âge": [28, 34, 22, 45, 31],
"département": ["RH", "Tech", "Tech", "Finance", "RH"],
"salaire": [2800, 3500, 2200, 4100, 2950]
}
df = pd.DataFrame(data)
# Condition simple avec query()
print(df.query("âge > 30"))
# Conditions combinées
print(df.query("département == 'Tech' and salaire > 3000"))
# Utiliser une variable Python dans la condition avec @
seuil = 3000
print(df.query("salaire > @seuil"))
Pour injecter une variable Python dans une chaîne query(), préfixez-la avec @. Sans ça, Pandas cherche une colonne portant ce nom et lève une erreur. query() est particulièrement utile pour les conditions longues ou dans un pipeline de traitement où la lisibilité compte.
Par carabde | Mis à jour le 26 avril 2026