Rechercher une valeur dans une colonne pandas : ==, isin(), query() et str.contains()
Publié le
Mis à jour le
Pour rechercher une valeur dans une colonne d’un DataFrame pandas, filtrez avec l’indexation booléenne : df[df['colonne'] == valeur]. Le résultat contient uniquement les lignes où la colonne correspond.
df[df['Age'] == 27] # correspondance exacte
df[df['City'].isin(['Paris', 'Tokyo'])] # plusieurs valeurs
df.query("Age > 25 and Gender == 'Female'") # syntaxe proche de SQLQuelle méthode pour quelle recherche ?
| Vous cherchez… | Méthode | Exemple |
|---|---|---|
| Une valeur exacte | Indexation booléenne | df[df['Age'] == 27] |
| Plusieurs valeurs possibles | isin() | df[df['City'].isin(cities)] |
| Conditions lisibles / combinées | query() | df.query("Age > 25") |
| Un motif dans du texte | str.contains() | df[df['City'].str.contains('on')] |
| Les valeurs manquantes | isna() / notna() | df[df['City'].isna()] |
| Une seule cellule précise | .at / .iat | df.at[0, 'Age'] |
Chaque méthode est détaillée ci-dessous avec un exemple exécutable, puis des conseils de performance vérifiés.
Le DataFrame d’exemple
import pandas as pd
data = {
'Name': ['John', 'Emma', 'Peter', 'David', 'Sophie'],
'Age': [27, 21, 24, 30, 29],
'Gender': ['Male', 'Female', 'Male', 'Male', 'Female'],
'City': ['New York', 'London', 'Paris', 'Tokyo', 'Rio de Janeiro']
}
df = pd.DataFrame(data)1. Correspondance exacte (indexation booléenne)
result = df[df['Age'] == 27]
print(result)Résultat :
Name Age Gender City
0 John 27 Male New YorkTous les opérateurs de comparaison fonctionnent :
| Opérateur | Signification |
|---|---|
== | égal |
!= | différent |
> / < | supérieur / inférieur |
>= / <= | supérieur ou égal / inférieur ou égal |
Exemple : les lignes où Age ≥ 25
df[df['Age'] >= 25]Pour un tour complet du filtrage de lignes (conditions multiples, ~ pour la négation…), voyez filtrer les lignes d’un DataFrame pandas.
2. Rechercher plusieurs valeurs avec isin()
cities = ['Paris', 'Tokyo']
df[df['City'].isin(cities)]Résultat :
Name Age Gender City
2 Peter 24 Male Paris
3 David 30 Male TokyoUtilisez ~df['col'].isin(...) pour exclure ces valeurs.
3. Rechercher avec query() (lisible et proche de SQL)
df.query("Age == 27")Avec plusieurs conditions :
df.query("Age > 25 and Gender == 'Female'")Souvent plus clair que l’indexation booléenne imbriquée, surtout au-delà de deux conditions.
4. Rechercher un motif dans des chaînes (str.contains())
Contient une sous-chaîne
df[df['City'].str.contains('on', case=False, na=False)]Commence ou se termine par
df[df['Name'].str.startswith('J')]
df[df['City'].str.endswith('o')]Le paramètre na=False évite les erreurs sur les valeurs manquantes. Plus de motifs (regex, extraction, remplacement) dans les opérations sur chaînes pandas.
5. Rechercher les valeurs manquantes / non manquantes
df[df['City'].isna()] # valeurs manquantes
df[df['City'].notna()] # valeurs non manquantes6. Rechercher sur plusieurs colonnes
Les lignes où au moins une colonne correspond :
df[df.eq('Male').any(axis=1)]Les lignes où toutes les conditions sont remplies :
df[(df['Gender'] == 'Female') & (df['Age'] > 25)]Conseils de performance (vérifiés)
Certains conseils répandus dans d’anciens tutoriels sont faux. Voici ce qui tient :
✔ 1. Convertir en category les colonnes à valeurs répétées
df['City'] = df['City'].astype('category')✔ 2. Utiliser des tableaux NumPy pour les très gros volumes
import numpy as np
ages = df['Age'].to_numpy()
df[ages == 27]✔ 3. Éviter apply() pour la recherche
Les opérations vectorisées (indexation booléenne, isin(), query()) sont toujours plus rapides qu’une fonction Python ligne à ligne.
❌ Faux : « .loc[] est plus rapide que l’indexation booléenne »
Les deux passent par le même mécanisme interne. .loc[] sert à la sélection par labels (voir le guide de df.loc), pas à accélérer la recherche.
⚠ À propos de searchsorted()
searchsorted() exige une colonne triée et renvoie une position d’insertion — pas la preuve que la valeur existe :
df_sorted = df.sort_values('Age')
idx = df_sorted['Age'].searchsorted(27)Réservez-le aux cas avancés.
Explorer visuellement les résultats filtrés
Pour inspecter un sous-ensemble filtré sans écrire de code de visualisation, PyGWalker transforme votre DataFrame en interface interactive de type Tableau dans Jupyter Notebook :
pip install pygwalker
import pygwalker as pyg
gwalker = pyg.walk(df)Conclusion
Les méthodes de recherche essentielles dans pandas :
- indexation booléenne pour les correspondances exactes ;
isin()pour plusieurs valeurs ;query()pour un filtrage clair, proche de SQL ;str.contains()pour les motifs textuels ;isna()/notna()pour les valeurs manquantes ;- combinaisons de conditions sur plusieurs colonnes.
Tutoriels associés
- Filtrer les lignes d’un DataFrame pandas
- Le guide de
df.loc: sélection par labels - Renommer une colonne dans pandas
- Trier un DataFrame par index
- Opérations sur chaînes de caractères
Foire aux questions
-
Comment rechercher une valeur spécifique dans une colonne d’un DataFrame ? Utilisez l’indexation booléenne :
df[df['Age'] == 27] -
Comment récupérer une valeur spécifique d’une colonne ? Utilisez l’index de ligne + le nom de colonne :
df['Age'][0] -
Comment obtenir rapidement une seule valeur ? Utilisez
.atou.iat:df.at[0, 'Age'] df.iat[0, 1]
