pandas : lire et écrire un CSV ou un Excel
Pourquoi passer à Python ?
| Besoin | Apps Script | Python |
|---|---|---|
| Fichiers Excel ou CSV sur votre poste | non (il faut les importer dans Sheets) | oui |
| Plus de 6 minutes de traitement | non (reprise manuelle) | oui |
| Tests automatiques | possible, mais hors de Google | oui (pytest) |
| Aucune installation | oui | non |
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
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
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 :
| Code | Signification |
|---|---|
df.columns | la 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=False | n'écrit pas la colonne de numéros de ligne dans le fichier |
Pourquoi convertir les colonnes IA en texte avec fillna("") et astype(str) ?
À la relecture d'un CSV, une cellule vide devient NaN, pas "". Sans conversion, df["statut"] == "" serait faux pour ces lignes, et la reprise ne les traiterait jamais.
Quel paquet faut-il pour que pandas lise un fichier .xlsx ?
pandas délègue la lecture et l'écriture des .xlsx au moteur openpyxl, listé dans requirements.txt.
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 111Ces 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 :
(20, 10)
['id', 'date', 'expediteur', 'objet', 'texte', 'resume', 'categorie', 'priorite', 'brouillon_reponse', 'statut']
id objet
1 Colis abîmé
2 Facture F-2210
3 HorairesLes 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