درس 6 — La même automatisation en Python

pandas : lire et écrire un CSV ou un Excel

4 دقائق قراءة

هذا المحتوى غير مترجم بعد. تُعرض النسخة الأصلية.

pandas : lire et écrire un CSV ou un Excel

Pourquoi passer à Python ?

BesoinApps ScriptPython
Fichiers Excel ou CSV sur votre postenon (il faut les importer dans Sheets)oui
Plus de 6 minutes de traitementnon (reprise manuelle)oui
Tests automatiquespossible, mais hors de Googleoui (pytest)
Aucune installationouinon

pandas est la bibliothèque Python de référence pour manipuler des tableaux (on les appelle des DataFrame : des lignes, des colonnes nommées, comme une feuille de tableur).

Installer

terminal
cd files
python3 -m venv .venv && source .venv/bin/activate     # Windows : .venv\Scripts\activate
pip install -r requirements.txt                         # google-genai, pandas, openpyxl, pydantic...
cp .env.example .env                                    # puis mettez votre clé

openpyxl est le moteur qui permet à pandas de lire et écrire des fichiers .xlsx.

Lire, compléter, écrire

files/traiter_lot.py (extrait)
COLONNES_IA = ["resume", "categorie", "priorite", "brouillon_reponse", "statut"]

def lire(chemin: Path) -> pd.DataFrame:
    df = pd.read_excel(chemin) if chemin.suffix in (".xlsx", ".xls") else pd.read_csv(chemin)
    for c in COLONNES_IA:
        if c not in df.columns:
            df[c] = ""
    return df.fillna("").astype({c: str for c in COLONNES_IA})

def ecrire(df: pd.DataFrame, chemin: Path):
    df.to_excel(chemin, index=False) if chemin.suffix in (".xlsx", ".xls") else df.to_csv(chemin, index=False)
flowchart LR
  F["emails.csv ou emails.xlsx"] --> R["lire() : read_csv / read_excel"]
  R --> A["+ colonnes vides resume ... statut"]
  A --> T["traitement IA (leçon suivante)"]
  T --> W["ecrire() : emails_traite.csv / .xlsx"]
  F -. "jamais modifié" .- W

Quelques notions pandas utilisées :

CodeSignification
df.columnsla liste des noms de colonnes
df["statut"] == ""une colonne de vrai/faux : « cette ligne n'a pas de statut »
df.index[...]les numéros des lignes qui vérifient la condition
df.at[i, "objet"]la valeur d'une cellule (ligne i, colonne objet)
fillna("")remplace les cellules vides (NaN, « pas un nombre ») par du texte vide
index=Falsen'écrit pas la colonne de numéros de ligne dans le fichier

Pourquoi convertir les colonnes IA en texte avec fillna("") et astype(str) ?

Quel paquet faut-il pour que pandas lise un fichier .xlsx ?

Exercice : compter avant de payer

Écrivez trois lignes de Python qui lisent emails.csv avec lire() et affichent : le nombre de lignes, le nombre de lignes sans statut (celles qui seront envoyées à l'IA), et la longueur moyenne des textes en caractères.

Voir la solution
from pathlib import Path
import traiter_lot as tl

df = tl.lire(Path("emails.csv"))
print(len(df), (df["statut"] == "").sum(), round(df["texte"].str.len().mean()))
# 20 20 111

Ces chiffres permettent d'estimer le coût avant de lancer : 20 appels, chacun avec un texte court plus la consigne.

Résultat obtenu

Exécution réelle le 2026-10-15 :

lecture de emails.csv avec lire()
(20, 10)
['id', 'date', 'expediteur', 'objet', 'texte', 'resume', 'categorie', 'priorite', 'brouillon_reponse', 'statut']
 id          objet
  1    Colis abîmé
  2 Facture F-2210
  3       Horaires

Les 5 colonnes d'origine sont complétées par les 5 colonnes IA, vides pour l'instant. Le test test_excel_aller_retour vérifie qu'un aller-retour en .xlsx conserve les lignes.

  • J'ai installé le lab Python et ses dépendances
  • Je sais lire un CSV ou un Excel avec pandas et ajouter des colonnes
  • J'écris toujours dans un nouveau fichier, jamais sur l'original
التالي