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.
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().
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.
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.
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