Section 11.2.14 : JSON, CSV, Excel — Maîtriser les formats de données
🎯 Objectif pédagogique
Comprendre les différences entre les formats de données courants (JSON, CSV, Excel, Parquet) et savoir les manipuler en Python. Vous serez capable de lire, convertir et écrire dans n'importe quel format de données.
Le format définit le "langage" des données
Marc l'a appris à ses dépens : un collègue lui envoie un CSV avec des points-virgules, Excel l'ouvre... et tout est dans une seule colonne. Comprendre les formats de données est aussi important que comprendre les données elles-mêmes.
CSV — Le format universel
import pandas as pd
# Lire un CSV standard
df = pd.read_csv("jobs.csv")
# CSV français (séparateur ;, décimale ,)
df = pd.read_csv("data_fr.csv", sep=";", decimal=",", encoding="utf-8")
# Options utiles
df = pd.read_csv("data.csv",
header=0, # Ligne d'en-tête (0 = première ligne)
usecols=['company', 'salary'], # Seulement ces colonnes
dtype=\{'salary': int\}, # Forcer le type
parse_dates=['date'], # Convertir en datetime
na_values=['N/A', 'missing', ''], # Valeurs à traiter comme NaN
nrows=1000 # Lire seulement 1000 lignes
)
# Écrire un CSV
df.to_csv("output.csv", index=False)
df.to_csv("output_fr.csv", index=False, sep=";", encoding="utf-8-sig")
JSON — Le format du web
import json
# Lire un fichier JSON
with open("data.json", "r", encoding="utf-8") as f:
data = json.load(f)
# Écrire un fichier JSON
with open("output.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
# JSON → DataFrame
df = pd.read_json("data.json")
# JSON imbriqué → DataFrame (normalisation)
import pandas as pd
nested = \{
"users": [
\{"name": "Marc", "details": \{"age": 34, "city": "Paris"\}\},
\{"name": "Alice", "details": \{"age": 28, "city": "Lyon"\}\}
]
\}
df = pd.json_normalize(nested['users'])
# Résultat : name | details.age | details.city
# DataFrame → JSON
df.to_json("output.json", orient="records", indent=2, force_ascii=False)
Excel — Le format corporate
# Lire Excel
df = pd.read_excel("report.xlsx")
df = pd.read_excel("report.xlsx", sheet_name="Q1 2026")
# Toutes les feuilles
all_sheets = pd.read_excel("report.xlsx", sheet_name=None) # Dict de DataFrames
for name, sheet_df in all_sheets.items():
print(f"Feuille '\{name\}': \{sheet_df.shape\}")
# Écrire Excel (avec mise en forme basique)
with pd.ExcelWriter("report.xlsx", engine="openpyxl") as writer:
df_summary.to_excel(writer, sheet_name="Résumé", index=False)
df_details.to_excel(writer, sheet_name="Détails", index=False)
Comparaison des formats
| Format | Poids | Lisible par humain | Schéma | Vitesse lecture | Usage typique |
|---|---|---|---|---|---|
| CSV | Léger | ✅ Oui | ❌ Aucun | ⚡ Rapide | Export/import universel |
| JSON | Moyen | ✅ Oui | ✅ Flexible | ⚡ Rapide | APIs, config, web |
| Excel | Lourd | ✅ Oui (logiciel) | ✅ Feuilles | 🐌 Lent | Reporting corporate |
| Parquet | Très léger | ❌ Binaire | ✅ Typé | ⚡⚡ Très rapide | Big Data, analytics |
| SQLite | Moyen | ❌ Binaire | ✅ SQL | ⚡ Rapide | Base de données locale |
Parquet — Le format pro de la data
# Parquet = compression + types + vitesse
# Parfait pour les gros fichiers (10x plus petit que CSV, 5x plus rapide à lire)
# Écrire
df.to_parquet("data.parquet")
# Lire
df = pd.read_parquet("data.parquet")
# Comparaison sur 1M de lignes :
# CSV: 250 Mo, lecture 3.2s
# Parquet: 25 Mo, lecture 0.4s
Conversions courantes
# CSV → Excel
df = pd.read_csv("input.csv")
df.to_excel("output.xlsx", index=False)
# JSON → CSV
df = pd.read_json("api_data.json")
df.to_csv("output.csv", index=False)
# Excel → Parquet (pour l'analyse)
df = pd.read_excel("corporate_report.xlsx")
df.to_parquet("optimized.parquet")
Règle de Marc pour les formats
- →Partager avec des humains → Excel ou CSV
- →Envoyer à une API → JSON
- →Stocker pour l'analyse → Parquet
- →Archiver avec schéma → SQLite En pratique, Marc utilise CSV pour échanger, Parquet pour stocker, et JSON pour les APIs.
🏋️ Exercice pratique (15 minutes)
# Créez un pipeline de conversion
# 1. Créez un DataFrame de 10 candidatures
# 2. Exportez en CSV, JSON, Excel et Parquet
# 3. Relisez chaque format et vérifiez les shapes
# 4. Comparez les tailles de fichiers
Pourquoi le format Parquet est-il recommandé pour les gros datasets en data science ?
Quelle option utiliser pour lire un CSV français avec des points-virgules comme séparateur ?