Skip to content

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 SQL

Quelle méthode pour quelle recherche ?

Vous cherchez…MéthodeExemple
Une valeur exacteIndexation booléennedf[df['Age'] == 27]
Plusieurs valeurs possiblesisin()df[df['City'].isin(cities)]
Conditions lisibles / combinéesquery()df.query("Age > 25")
Un motif dans du textestr.contains()df[df['City'].str.contains('on')]
Les valeurs manquantesisna() / notna()df[df['City'].isna()]
Une seule cellule précise.at / .iatdf.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 York

Tous les opérateurs de comparaison fonctionnent :

OpérateurSignification
==é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  Tokyo

Utilisez ~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 manquantes

6. 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)

PyGWalker for Data visualization (opens in a new tab)

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

Foire aux questions

  1. Comment rechercher une valeur spécifique dans une colonne d’un DataFrame ? Utilisez l’indexation booléenne :

    df[df['Age'] == 27]
  2. Comment récupérer une valeur spécifique d’une colonne ? Utilisez l’index de ligne + le nom de colonne :

    df['Age'][0]
  3. Comment obtenir rapidement une seule valeur ? Utilisez .at ou .iat :

    df.at[0, 'Age']
    df.iat[0, 1]