Export de données avec Pandas
Pandas offre de riches fonctionnalités d'export, permettant d'exporter un DataFrame vers divers formats courants, notamment CSV, Excel, les bases de données SQL, JSON, etc. Cette section détaille l'utilisation et les considérations pour chaque méthode d'export.
Export vers CSV
Le CSV est le format d'échange de données le plus courant. Les exports sont affectés par l'encodage par défaut de l'environnement, il faut donc faire attention aux problèmes d'encodage des caractères chinois.
Export de base
Exemple
# Préparer les données de test
df = pd.DataFrame({
"Nom": ["Zhang San", "Li Si", "Wang Wu", "Zhao Liu"],
"Âge": [25, 30, 28, 35],
Ville: ["Pékin", "Shanghai", Canton, Shenzhen],
Salaire: [12000, 15000, 11000, 18000]
})
# L'export le plus basique (avec index)
df.to_csv("output.csv")
# Sans index
df.to_csv("output.csv", index=False)
Gestion de l'encodage chinois
Exemple
df = pd.DataFrame({
"Nom": ["Zhang San", "Li Si", "Wang Wu"],
Ville: ["Pékin", "Shanghai", Canton]
})
# Encodage UTF-8 (recommandé)
df.to_csv("output_utf8.csv", encoding="utf-8")
# UTF-8 avec BOM (Excel s'ouvre sans caractères corrompus)
df.to_csv("output_utf8_bom.csv", encoding="utf-8-sig")
# Encodage GBK (adapté aux systèmes anciens)
df.to_csv("output_gbk.csv", encoding="gbk")
# Vérifier l'encodage
import os
print("Comparaison de la taille des fichiers :")
for f in ["output_utf8.csv", "output_utf8_bom.csv", "output_gbk.csv"]:
print(f"{f}: {os.path.getsize(f)} bytes")
Options d'export expliquées
Exemple
df = pd.DataFrame({
"Nom": ["Zhang San", "Li Si"],
"Âge": [25, 30]
})
# Spécifier le délimiteur (par défaut, la virgule)
df.to_csv("output.tsv", sep="\t") # Format TSV
# Ne pas écrire l'en-tête
df.to_csv("output.csv", header=False)
# Noms de colonnes personnalisés (lorsque header=False)
df.to_csv("output.csv", header=False, columns=["Name", "Age"])
# Exporter uniquement des colonnes spécifiques
df.to_csv("output.csv", columns=["Name"]) # Exporter uniquement la colonne "Name"
# Gestion des valeurs manquantes
import numpy as np
df_with_na = pd.DataFrame({
"A": [1, 2, np.nan, 4],
"B": ["a", Aucune, "c", "d"]
})
df_with_na.to_csv("output.csv", na_rep="NULL") # Spécifier la représentation des valeurs manquantes
# Précision des nombres à virgule flottante
df = pd.DataFrame({"value": [1.23456789, 2.3456789]})
df.to_csv("output.csv", float_format="%.2f") # Conserver 2 décimales
Exporter vers Excel
Le format Excel convient à la visualisation et à la modification manuelles, mais l'exportation de fichiers volumineux est plus lente.
Installer les dépendances
pip install openpyxl xlwt
Export de base
Exemple
df = pd.DataFrame({
"Nom": ["Zhang San", "Li Si", "Wang Wu"],
"Âge": [25, 30, 28],
Ville: ["Pékin", "Shanghai", Canton],
Salaire: [12000, 15000, 11000]
})
# Exporter vers Excel (format .xlsx, nécessite openpyxl)
df.to_excel("output.xlsx", index=False)
# Exporter vers le format .xls hérité (nécessite xlwt)
df.to_excel("output.xls", index=False)
Export multi-feuilles
Exemple
# Créer plusieurs DataFrames
df1 = pd.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6]})
df2 = pd.DataFrame({"C": [7, 8, 9], "D": [10, 11, 12]})
# Exporter vers différentes feuilles dans le même Excel
with pd.ExcelWriter("output.xlsx", engine="openpyxl") as writer:
df1.to_excel(writer, sheet_name="Sheet1", index=False)
df2.to_excel(writer, sheet_name="Sheet2", index=False)
print(Plusieurs feuilles exportées avec succès)
Export formaté
Exemple
from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill, Alignement
# Créer un DataFrame
df = pd.DataFrame({
"Nom": ["Zhang San", "Li Si", "Wang Wu"],
"Âge": [25, 30, 28],
Salaire: [12000, 15000, 11000]
})
# Utiliser ExcelWriter pour un contrôle plus fin
with pd.ExcelWriter("output_formatted.xlsx", engine="openpyxl") as writer:
df.to_excel(writer, sheet_name="Informations sur les employés", index=False)
# Obtenir la feuille de calcul
worksheet = writer.sheets["Informations sur les employés"]
# Définir la largeur de colonne
worksheet.column_dimensions["A"].width = 15
worksheet.column_dimensions["B"].width = 10
worksheet.column_dimensions["C"].width = 12
# Figer la première ligne
worksheet.freeze_panes = "A2"
print("Exportation formatée terminée")
Exporter vers une base de données
Vous pouvez exporter directement un DataFrame vers une base de données SQL. Voir le chapitre « Lecture d'une base de données SQL avec Pandas » pour plus de détails.
Exemple
from sqlalchemy import create_engine
# Créer une base de données en mémoire
engine = create_engine("sqlite:///output.db")
# Préparer les données
df = pd.DataFrame({
"name": ["Zhang San", "Li Si", "Wang Wu"],
"age": [25, 30, 28],
"city": ["Beijing", "Shanghai", Guangzhou]
})
# Exporter vers la base de données
# if_exists: 'fail' (par défaut) / 'replace' / 'append'
df.to_sql("users", con=engine, if_exists="replace", index=False)
print("Export vers la base de données réussi")
Export vers JSON
Exemple
df = pd.DataFrame({
"Nom": ["Zhang San", "Li Si", "Wang Wu"],
"Âge": [25, 30, 28]
})
# Différents formats pour orient
df.to_json("records.json", orient="records", force_ascii=False, indent=2)
df.to_json("index.json", orient="index", force_ascii=False)
df.to_json("columns.json", orient="columns", force_ascii=False)
# Format JSON Lines (un objet JSON par ligne, adapté aux journaux)
df.to_json("lines.json", orient="records", lines=True, force_ascii=False)
Exporter vers d'autres formats
Exporter en HTML
Exemple
df = pd.DataFrame({
"Nom": ["Zhang San", "Li Si"],
"Âge": [25, 30]
})
# Exporter vers un tableau HTML
df.to_html("output.html", index=False)
# Ajouter des styles
df.to_html(
"output_styled.html",
index=False,
border=2,
classes=["table", "table-striped"] # Ajouter des classes CSS
)
Exporter en Markdown
Exemple
df = pd.DataFrame({
"Nom": ["Zhang San", "Li Si", "Wang Wu"],
"Âge": [25, 30, 28]
})
# Exporter en tableau Markdown
print(df.to_markdown(index=False))
# Sortie :
# | Name | Age |
# | ---- | ---- |
# | Zhang San | 25 |
# | Li Si | 30 |
# | Wang Wu | 28 |
# Enregistrer dans un fichier
with open("output.md", "w") as f:
f.write(df.to_markdown(index=False))
Exporter vers LaTeX
Exemple
df = pd.DataFrame({
"Nom": ["Zhang San", "Li Si"],
"Âge": [25, 30]
})
# Exporter le tableau vers LaTeX
print(df.to_latex(index=False))
# Afficher le code du tableau LaTeX
Exporter vers Pickle
Exemple
df = pd.DataFrame({
"A": [1, 2, 3],
"B": ["a", "b", "c"]
})
# Exporter vers Pickle (préserver les types de données)
df.to_pickle("data.pkl")
# Format compressé
df.to_pickle("data.pkl.gz", compression="gzip")
print("Export Pickle terminé")
Export de données volumineuses
Lors de l'exportation de grandes quantités de données, vous devez faire attention aux problèmes de mémoire et de performances.
Exemple
# Recommandations pour l'exportation de grandes quantités de données :
# 1. Utiliser chunksize pour écrire par lots
df = pd.DataFrame({"a": range(1000000), "b": range(1000000)})
# Écrire le CSV par morceaux
csv_path = "large_output.csv"
df.to_csv(csv_path, index=False, chunksize=100000)
# 2. Utiliser un format plus efficace (Parquet)
df.to_parquet("large_output.parquet", index=False)
# 3. Utiliser un format compressé pour réduire les E/S
df.to_csv("large_output.csv.gz", index=False, compression="gzip")
print("Large data volume export complete")
Problèmes courants et points à prendre en compte
1. Excel ouvre les fichiers CSV avec du texte illisible
Utiliserutf-8-sigExportez avec encoding, Excel pourra alors reconnaître correctement le chinois.
2. Mémoire insuffisante lors de l'export de grandes quantités de données
UtiliserchunksizeÉcrivez les paramètres par lots, ou utilisez le format Parquet au lieu du CSV.
3. Perte du format de date et d'heure
Lors de l'export CSV, la valeur sera convertie en chaîne de caractères. Vous pouvez spécifierdate_formatdes paramètres pour contrôler le format.
4. Incompatibilité de types lors de l'export vers une base de données
Vous pouvez utiliserdtypedes paramètres pour spécifier explicitement les types de colonnes.
Autres extensionsPour l'analyse quotidienne des données, le format Parquet est recommandé. Il présente des avantages tels qu'un taux de compression élevé, une lecture/écriture rapide et la préservation des types de données. N'utilisez les formats Excel ou CSV que lorsque la consultation manuelle ou le partage est nécessaire.