pandas : manipuler des tables de données
Là où NumPy manipule des tableaux de nombres, pandas manipule des tables étiquetées : chaque colonne a un nom, chaque ligne peut avoir un index explicite. C’est l’outil que vous utiliserez pour 80 % du travail de préparation de données de ce cours.
Créer un DataFrame
Section titled “Créer un DataFrame”import pandas as pd
ventes = pd.DataFrame({ "date": pd.to_datetime([ "2026-06-01", "2026-06-01", "2026-06-02", "2026-06-02", "2026-06-03", "2026-06-03", "2026-06-04", ]), "region": ["Nord", "Sud", "Nord", "Sud", "Nord", "Sud", "Nord"], "produit": ["A", "B", "A", "A", "B", "B", "A"], "montant": [120.0, 85.0, 95.0, 60.0, 140.0, 75.0, 110.0],})print(ventes) date region produit montant0 2026-06-01 Nord A 120.01 2026-06-01 Sud B 85.02 2026-06-02 Nord A 95.03 2026-06-02 Sud A 60.04 2026-06-03 Nord B 140.05 2026-06-03 Sud B 75.06 2026-06-04 Nord A 110.0pd.to_datetime convertit des chaînes de caractères en un type date exploitable (indispensable dès qu’on trie ou groupe par période — voir le module 8 sur les séries temporelles).
Filtrer
Section titled “Filtrer”Le filtrage pandas reprend directement l’indexation booléenne de NumPy, appliquée aux lignes d’une table :
print(ventes[ventes["region"] == "Nord"])print(ventes[ventes["montant"] > 100]) date region produit montant0 2026-06-01 Nord A 120.02 2026-06-02 Nord A 95.04 2026-06-03 Nord B 140.06 2026-06-04 Nord A 110.0groupby : l’opération la plus utilisée en data science
Section titled “groupby : l’opération la plus utilisée en data science”groupby répond à des questions du type « pour chaque valeur de X, calcule Y » :
par_region = ventes.groupby("region")["montant"].agg(["sum", "mean", "count"])print(par_region) sum mean countregionNord 465.0 116.250000 4Sud 220.0 73.333333 3On peut grouper par plusieurs colonnes à la fois :
print(ventes.groupby(["region", "produit"])["montant"].sum())region produitNord A 325.0 B 140.0Sud A 60.0 B 160.0Name: montant, dtype: float64Séries temporelles : une première moyenne mobile
Section titled “Séries temporelles : une première moyenne mobile”ventes_par_jour = ventes.groupby("date")["montant"].sum()print(ventes_par_jour.rolling(2).mean())date2026-06-01 NaN2026-06-02 180.02026-06-03 185.02026-06-04 162.5Name: montant, dtype: float64rolling(2).mean() calcule, pour chaque jour, la moyenne glissante sur lui-même et le jour précédent — d’où le NaN pour le premier jour, qui n’a pas de jour antérieur. Cette notion de fenêtre glissante reviendra en détail au module 8.
Valeurs manquantes
Section titled “Valeurs manquantes”print(ventes_incomplete.isna().sum())ventes_nettoyee = ventes_incomplete.dropna(subset=["montant"])print("lignes avant/après dropna:", len(ventes_incomplete), "->", len(ventes_nettoyee))date 0region 0produit 0montant 1dtype: int64lignes avant/après dropna: 7 -> 6isna() repère les valeurs manquantes colonne par colonne ; dropna les élimine. Une alternative — remplacer plutôt que supprimer (fillna) — sera discutée quand elle s’applique réellement, au module 4.
Prochaine étape
Section titled “Prochaine étape”👉 Visualiser des données avec Matplotlib et Seaborn
Junior TSAFACK – 12/09/2026