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

import pandas as pd

# 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

import pandas as pd

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

import pandas as pd

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

import pandas as pd

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

import pandas as pd

# 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

import pandas as pd
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

import pandas as pd
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

import pandas as pd

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

import pandas as pd

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

import pandas as pd

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

import pandas as pd

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

import pandas as pd

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

import pandas as pd

# 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.

Pour 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.

Autres extensions