logo oujood
🔍

Lire un fichier Excel avec Pandas

Vous savez déjà charger une feuille Excel basique. Cette page approfondit read_excel() : lire plusieurs feuilles en une passe, gérer les colonnes mal typées, traiter les en-têtes complexes, et réécrire proprement un fichier Excel depuis Pandas.

OUJOOD.COM

Lire toutes les feuilles d'un classeur en une passe

Un classeur Excel contient souvent plusieurs feuilles structurées de la même façon — un onglet par mois, par région, par département. Charger chacune manuellement serait répétitif. En passant sheet_name=None, Pandas retourne un dictionnaire où chaque clé est le nom d'une feuille et chaque valeur est son DataFrame.

  📋 Copier le code

import pandas as pd

# Charger toutes les feuilles d'un coup
classeur = pd.read_excel("rapport_annuel.xlsx", sheet_name=None)

# Voir les noms des feuilles disponibles
print(list(classeur.keys()))
# ['Janvier', 'Février', 'Mars', ..., 'Décembre']

# Concaténer toutes les feuilles en un seul DataFrame
df_annuel = pd.concat(classeur.values(), ignore_index=True)
print(df_annuel.shape)

pd.concat(classeur.values()) empile verticalement tous les DataFrames du dictionnaire. C'est utile quand chaque feuille a la même structure de colonnes — un classeur mensuel, par exemple. ignore_index=True recrée un index numérique continu de 0 à N au lieu de conserver les index de chaque feuille.

Forcer les types de colonnes et parser les dates

Excel stocke les dates dans un format numérique interne. Pandas les convertit généralement bien en datetime64 automatiquement, mais pas toujours — surtout si les cellules sont formatées comme du texte dans le fichier source. Les paramètres dtype et parse_dates s'appliquent exactement comme avec read_csv().

  📋 Copier le code

import pandas as pd

df = pd.read_excel(
    "commandes.xlsx",
    sheet_name="Données",
    dtype={
        "référence":   str,      # garde les zéros initiaux
        "code_client": str,      # identifiant texte
        "quantité":    "int32"   # entier plus léger
    },
    parse_dates=["date_commande", "date_livraison"]
)

print(df.dtypes)
# Calculer le délai de livraison
df["délai"] = (df["date_livraison"] - df["date_commande"]).dt.days
print(df[["référence", "délai"]].head())

Le réflexe str sur les colonnes de codes est le même qu'avec les CSV : toute valeur qui ressemble à un nombre mais ne sera jamais calculée doit être chargée comme texte. Cela évite les suppressions silencieuses de zéros et les conversions en flottant quand une cellule est vide.

Gérer les en-têtes sur plusieurs lignes

Certains fichiers Excel professionnels ont des en-têtes sur deux lignes : une ligne de catégorie au-dessus et une ligne de sous-catégorie en-dessous. Pandas gère ça avec le paramètre header qui accepte une liste de numéros de lignes.

  📋 Copier le code

import pandas as pd

# Fichier avec en-tête sur 2 lignes (lignes 0 et 1)
df = pd.read_excel("tableau_croise.xlsx", header=[0, 1])

# Les colonnes deviennent un MultiIndex
print(df.columns)

# Aplatir les colonnes si le MultiIndex est gênant
df.columns = [" ".join(col).strip() for col in df.columns]
print(df.columns)

Avec header=[0, 1], les colonnes deviennent un MultiIndex — chaque colonne a deux niveaux de nom. Pour retrouver des noms simples, la compréhension de liste concatène les deux niveaux avec un espace. C'est souvent plus pratique pour la suite des traitements.

Écrire un DataFrame dans un fichier Excel

L'opération inverse — exporter un DataFrame vers Excel — se fait avec to_excel(). La logique est la même que to_csv(), avec en plus le choix du nom de la feuille de destination.

  📋 Copier le code

import pandas as pd

data = {
    "produit": ["Clavier", "Souris", "Écran"],
    "ventes":  [142, 98, 37],
    "CA":      [6513.80, 2205.00, 6993.00]
}
df = pd.DataFrame(data)

# Export simple vers Excel
df.to_excel("résultats.xlsx", index=False, sheet_name="Ventes Q1")

# Écrire plusieurs DataFrames dans plusieurs feuilles d'un même classeur
with pd.ExcelWriter("rapport.xlsx", engine="openpyxl") as writer:
    df.to_excel(writer, sheet_name="Ventes", index=False)
    df.to_excel(writer, sheet_name="Copie de sauvegarde", index=False)

pd.ExcelWriter est le bon outil pour écrire plusieurs feuilles dans un seul classeur. Il agit comme un gestionnaire de contexte (with) qui s'assure que le fichier est correctement fermé et sauvegardé à la fin du bloc, même si une erreur survient en cours d'exécution.

Par carabde | Mis à jour le 26 avril 2026