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
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
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
- 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.
- 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.
- 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.
- 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`.
- Après un filtre, l'index garde les numéros d'origine ; reset_index(drop=True) renumérote à partir de 0.
Voir aussi
- pandas — DataFramepandas manipule des tableaux (DataFrame) dont chaque colonne est une Series, comme une table SQL en mémoire. Commencez toujours par charger les données, puis inspecter leur forme et leurs types.
- pandas — groupby et agrégationgroupby découpe un tableau par catégorie puis agrège chaque groupe, exactement comme GROUP BY en SQL. On s'en sert pour un CA par ville, une moyenne par classe ou un nombre de connexions par jour.
- pandas — valeurs manquantesLes valeurs manquantes (NaN, None, NaT) faussent comptages et moyennes si on les ignore : isna les repère, fillna les remplace, dropna les écarte. Décidez au cas par cas, colonne par colonne.