← Retour au cours

Chapitre 2 — Pandas pour la data 📊

⏱ 50 min · 🎬 Video · 🏆 25 XP
🎬
Vidéo en production
Notre équipe pédagogique tourne actuellement cette leçon avec un·e formateur·rice expert·e. Le contenu textuel ci-dessous est complet et utilisable dès maintenant.

📊 Pandas : le couteau suisse de la data

Pandas est la bibliothèque incontournable pour manipuler des données tabulaires en Python. Vous allez l'utiliser 80% du temps dans vos projets data.

🧱 DataFrame vs Series

  • Series : tableau 1D avec index (équivalent d'une colonne Excel)
  • DataFrame : tableau 2D avec lignes + colonnes (équivalent d'une feuille Excel)

📥 Lecture de données

import pandas as pd

df = pd.read_csv('ventes.csv', sep=';', encoding='utf-8')
df = pd.read_excel('data.xlsx', sheet_name='Janvier')
df = pd.read_json('api_response.json')
df = pd.read_sql('SELECT * FROM commandes', conn)
df = pd.read_parquet('gros_dataset.parquet')  # ultra-rapide

🔍 Inspection rapide

df.head(10)        # 10 premières lignes
df.tail()          # 5 dernières lignes
df.info()          # types + valeurs manquantes
df.describe()      # stats : mean, std, min, max, quartiles
df.shape           # (n_lignes, n_colonnes)
df.dtypes          # type de chaque colonne
df.columns         # liste des colonnes

🎯 Sélection : .loc, .iloc, boolean indexing

# Par label (nom de colonne/index)
df.loc[0, 'prix']
df.loc[df['region'] == 'Centre', ['produit', 'prix']]

# Par position numérique
df.iloc[0:5, 1:3]   # 5 premières lignes, colonnes 1 à 2

# Filtres conditionnels
df[df['prix'] > 10000]
df[(df['region'] == 'Littoral') & (df['prix'] > 5000)]
df[df['produit'].isin(['Riz', 'Maïs'])]
💡 Astuce : Utilisez & et | (pas and/or) pour combiner des conditions sur DataFrame, et entourez chaque condition de parenthèses.

📦 GroupBy et agrégations

# Total ventes par région
df.groupby('region')['prix'].sum()

# Plusieurs agrégations
df.groupby('region').agg({
    'prix': ['sum', 'mean', 'count'],
    'quantite': 'sum'
})

# Transform : appliquer puis aligner sur df original
df['pct_region'] = df['prix'] / df.groupby('region')['prix'].transform('sum')

🔗 Merge, join, concat

# Jointure SQL-like (inner, left, right, outer)
ventes_clients = pd.merge(ventes, clients, on='client_id', how='left')

# Concaténer (empiler) plusieurs DataFrames
all_data = pd.concat([df_janv, df_fevr, df_mars], ignore_index=True)

🔄 Pivot tables

pivot = df.pivot_table(
    index='region',
    columns='produit',
    values='prix',
    aggfunc='sum'
)

🧹 Nettoyage des données

df.isnull().sum()              # combien de NaN par colonne ?
df['prix'].fillna(df['prix'].median(), inplace=True)
df.dropna(subset=['email'])    # supprimer lignes sans email
df.drop_duplicates(subset=['client_id'], keep='last')

# Parser des dates
df['date'] = pd.to_datetime(df['date'])
df['mois'] = df['date'].dt.month

⏱️ Séries temporelles

df = df.set_index('date')
df.resample('M')['ventes'].sum()  # total par mois
df['ventes'].rolling(window=7).mean()  # moyenne mobile 7 jours

📤 Export

df.to_csv('propre.csv', index=False, encoding='utf-8')
df.to_excel('rapport.xlsx', sheet_name='Resultats')
df.to_parquet('data.parquet')   # 10x plus petit, 5x plus rapide
📊 À retenir : Pandas remplace 90% de ce que vous faites en Excel — mais sur des millions de lignes, sans planter.