Aller au contenu
Data (pandas / numpy)

pandas — filtrer et sélectionner

Un masque booléen filtre les lignes d'un DataFrame, loc sélectionne par étiquette et iloc par position ; query offre une écriture proche du WHERE de SQL. C'est l'étape qui précède toute analyse.

  • loc
  • iloc
  • masque booléen
  • query
  • isin
  • between
  • WHERE

Syntaxe

Modèle
df[df["col"] > seuil]df.loc[masque, ["col1", "col2"]]      # par étiquettesdf.iloc[0:5, 0:2]                     # par positionsdf.query("col > @seuil and autre == 'x'")df["col"].isin([...])   df["col"].between(a, b)

Exemple

Exemple concret
import pandas as pdventes = pd.DataFrame({    "ville": ["Lyon", "Paris", "Lille", "Paris", "Lyon"],    "produit": ["clavier", "écran", "clavier", "souris", "écran"],    "montant": [49.9, 189.0, 52.0, 19.9, 210.0],})grosses = ventes[ventes["montant"] > 100]print(grosses["ville"].tolist())                  # → ['Paris', 'Lyon']masque = (ventes["ville"] == "Paris") | (ventes["produit"] == "clavier")print(round(ventes.loc[masque, "montant"].sum(), 2))  # → 310.8print(ventes.iloc[0, 2])                          # → 49.9seuil = 50print(ventes.query("montant < @seuil and ville != 'Lille'").index.tolist())  # → [0, 3]print(len(ventes[ventes["ville"].isin(["Lyon", "Lille"])]))  # → 3

À retenir

  1. Combinez les conditions avec & (et), | (ou) et ~ (non), en mettant chaque condition entre parenthèses : and et or lèvent une erreur sur une Series.
  2. loc travaille sur les étiquettes et inclut la borne de fin (df.loc[0:2] renvoie 3 lignes) ; iloc travaille sur les positions et l'exclut, comme une liste.
  3. Piège : une affectation en chaîne comme df[df["ville"] == "Lyon"]["montant"] = 0 ne modifie pas df : pandas 2 affiche SettingWithCopyWarning, et avec la copie à l'écriture de pandas 3 elle reste sans effet. Écrivez-la en une seule étape : df.loc[df["ville"] == "Lyon", "montant"] = 0.
  4. Dans query, @variable désigne une variable Python, et un nom de colonne contenant des espaces s'écrit entre accents graves, par exemple `prix HT`.
  5. Après un filtre, l'index garde les numéros d'origine ; reset_index(drop=True) renumérote à partir de 0.

Voir aussi