Sévérité : MoyennePython pour la data (pandas)

Chargement ETL en échec après changement de format du fichier source

```text
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 1532
pandas.errors.ParserError: Expected 8 fields in line 214, saw 11
```

Détecter

Le tableau de bord du matin affiche des chiffres à zéro ; le traitement nocturne d'import a échoué ou chargé des colonnes décalées.

Symptômes

Le tableau de bord du matin affiche des chiffres à zéro ; le traitement nocturne d'import a échoué ou chargé des colonnes décalées.

Environnement

Script Python (pandas) lisant un export CSV fourni par un système tiers, chargement dans l'entrepôt.

Cause racine

Le fournisseur a changé son export : encodage Windows-1252 au lieu d'UTF-8 et séparateur ; au lieu de ,, avec des montants au format 1 234,56.

Diagnostic

file -i export.csv
head -3 export.csv | cat -A
python3 -c "import csv;print(csv.Sniffer().sniff(open('export.csv',encoding='cp1252').read(4096)).delimiter)"

Solution

Lecture explicite et validation avant chargement :

df = pd.read_csv("export.csv", sep=";", encoding="cp1252", decimal=",", thousands=" ")
assert set(EXPECTED_COLUMNS) <= set(df.columns), "schéma inattendu"

Recharger la journée manquante après correction.

Commandes

iconv -f WINDOWS-1252 -t UTF-8 export.csv > export.utf8.csv
python3 etl.py --date 2026-09-23 --reload

Prévention

Contrat d'interface avec le fournisseur (format, encodage, schéma), validation de schéma bloquante (Great Expectations), alerte sur volume de lignes anormal, zone de quarantaine pour les fichiers invalides.