Pandas Datenexport

Pandas bietet umfangreiche Exportfunktionen, mit denen DataFrame in verschiedene gängige Formate exportiert werden kann, darunter CSV, Excel, SQL-Datenbanken, JSON und mehr. Dieser Abschnitt beschreibt die Verwendung und die zu beachtenden Punkte für jede Exportmethode.


Export nach CSV

CSV ist das gebräuchlichste Datenaustauschformat. Exporte werden von der Standardkodierung der Umgebung beeinflusst, daher müssen Sie auf Probleme mit der chinesischen Kodierung achten.

Grundlegender Export

Beispiel

import pandas as pd

# Testdaten vorbereiten
df = pd.DataFrame({
    "Name": ["Zhang San", "Li Si", "Wang Wu", "Zhao Liu"],
    "Alter": [25, 30, 28, 35],
    City: ["Beijing", "Shanghai", Guangzhou, Shenzhen],
    Salary: [12000, 15000, 11000, 18000]
})

# Der einfachste Export (einschließlich Index)
df.to_csv("output.csv")

# Ohne Index
df.to_csv("output.csv", index=False)

Umgang mit chinesischer Kodierung

Beispiel

import pandas as pd

df = pd.DataFrame({
    "Name": ["Zhang San", "Li Si", "Wang Wu"],
    City: ["Beijing", "Shanghai", Guangzhou]
})

# UTF-8-Kodierung (empfohlen)
df.to_csv("output_utf8.csv", encoding="utf-8")

# UTF-8 mit BOM (Excel öffnet ohne verstümmelte Zeichen)
df.to_csv("output_utf8_bom.csv", encoding="utf-8-sig")

# GBK-Kodierung (geeignet für Legacy-Systeme)
df.to_csv("output_gbk.csv", encoding="gbk")

# Kodierung überprüfen
import os
print("Dateigrößenvergleich:")
for f in ["output_utf8.csv", "output_utf8_bom.csv", "output_gbk.csv"]:
    print(f"{f}: {os.path.getsize(f)} bytes")

Exportoptionen erklärt

Beispiel

import pandas as pd

df = pd.DataFrame({
    "Name": ["Zhang San", "Li Si"],
    "Alter": [25, 30]
})

# Das Trennzeichen angeben (Standard ist Komma)
df.to_csv("output.tsv", sep="\t")  # TSV-Format

# Den Header nicht schreiben
df.to_csv("output.csv", header=False)

# Benutzerdefinierte Spaltennamen (wenn header=False)
df.to_csv("output.csv", header=False, columns=["Name", "Age"])

# Nur bestimmte Spalten exportieren
df.to_csv("output.csv", columns=["Name"])  # Nur die Spalte "Name" exportieren

# Umgang mit fehlenden Werten
import numpy as np
df_with_na = pd.DataFrame({
    "A": [1, 2, np.nan, 4],
    "B": ["a", Keine, "c", "d"]
})
df_with_na.to_csv("output.csv", na_rep="NULL")  # Darstellung fehlender Werte angeben

# Gleitkommagenauigkeit
df = pd.DataFrame({"value": [1.23456789, 2.3456789]})
df.to_csv("output.csv", float_format="%.2f")  # 2 Dezimalstellen beibehalten

Nach Excel exportieren

Das Excel-Format eignet sich für die manuelle Anzeige und Bearbeitung, aber der Export großer Dateien ist langsamer.

Abhängigkeiten installieren

pip install openpyxl xlwt

Grundlegender Export

Beispiel

import pandas as pd

df = pd.DataFrame({
    "Name": ["Zhang San", "Li Si", "Wang Wu"],
    "Alter": [25, 30, 28],
    City: ["Beijing", "Shanghai", Guangzhou],
    Salary: [12000, 15000, 11000]
})

# Nach Excel exportieren (.xlsx-Format, erfordert openpyxl)
df.to_excel("output.xlsx", index=False)

# In das veraltete .xls-Format exportieren (erfordert xlwt)
df.to_excel("output.xls", index=False)

Export mehrerer Tabellenblätter

Beispiel

import pandas as pd

# Mehrere DataFrames erstellen
df1 = pd.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6]})
df2 = pd.DataFrame({"C": [7, 8, 9], "D": [10, 11, 12]})

# In verschiedene Tabellenblätter in derselben Excel-Datei exportieren
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(Mehrere Tabellenblätter erfolgreich exportiert)

Formatierter Export

Beispiel

import pandas as pd
from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill, Alignment

# DataFrame erstellen
df = pd.DataFrame({
    "Name": ["Zhang San", "Li Si", "Wang Wu"],
    "Alter": [25, 30, 28],
    Salary: [12000, 15000, 11000]
})

# ExcelWriter für feinere Steuerung verwenden
with pd.ExcelWriter("output_formatted.xlsx", engine="openpyxl") as writer:
    df.to_excel(writer, sheet_name="Mitarbeiterinformationen", index=False)

    # Arbeitsblatt abrufen
    worksheet = writer.sheets["Mitarbeiterinformationen"]

    # Spaltenbreite festlegen
    worksheet.column_dimensions["A"].width = 15
    worksheet.column_dimensions["B"].width = 10
    worksheet.column_dimensions["C"].width = 12

    # Erste Zeile fixieren
    worksheet.freeze_panes = "A2"

print("Formatierter Export abgeschlossen")

Export in eine Datenbank

Sie können ein DataFrame direkt in eine SQL-Datenbank exportieren. Einzelheiten finden Sie im Kapitel "Pandas: SQL-Datenbank lesen".

Beispiel

import pandas as pd
from sqlalchemy import create_engine

# In-Memory-Datenbank erstellen
engine = create_engine("sqlite:///output.db")

# Daten vorbereiten
df = pd.DataFrame({
    "name": ["Zhang San", "Li Si", "Wang Wu"],
    "age": [25, 30, 28],
    "city": ["Beijing", "Shanghai", Guangzhou]
})

# Export in die Datenbank
# if_exists: 'fail' (Standard) / 'replace' / 'append'
df.to_sql("users", con=engine, if_exists="replace", index=False)

print("Export in die Datenbank erfolgreich")

Export nach JSON

Beispiel

import pandas as pd

df = pd.DataFrame({
    "Name": ["Zhang San", "Li Si", "Wang Wu"],
    "Alter": [25, 30, 28]
})

# Verschiedene orient-Formate
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)

# JSON-Lines-Format (ein JSON-Objekt pro Zeile, geeignet für Logs)
df.to_json("lines.json", orient="records", lines=True, force_ascii=False)

Export in andere Formate

Export nach HTML

Beispiel

import pandas as pd

df = pd.DataFrame({
    "Name": ["Zhang San", "Li Si"],
    "Alter": [25, 30]
})

# Export in HTML-Tabelle
df.to_html("output.html", index=False)

# Stile hinzufügen
df.to_html(
    "output_styled.html",
    index=False,
    border=2,
    classes=["table", "table-striped"]  # CSS-Klassen hinzufügen
)

Nach Markdown exportieren

Beispiel

import pandas as pd

df = pd.DataFrame({
    "Name": ["Zhang San", "Li Si", "Wang Wu"],
    "Alter": [25, 30, 28]
})

# In Markdown-Tabelle exportieren
print(df.to_markdown(index=False))
# Output:
# | Name | Alter |
# | ---- | ---- |
# | Zhang San | 25 |
# | Li Si | 30 |
# | Wang Wu | 28 |

# In Datei speichern
with open("output.md", "w") as f:
    f.Schreibe(df.to_markdown(index=False))

Export nach LaTeX

Beispiel

import pandas as pd

df = pd.DataFrame({
    "Name": ["Zhang San", "Li Si"],
    "Alter": [25, 30]
})

# Export nach LaTeX-Tabelle
print(df.to_latex(index=False))
# LaTeX-Tabellencode ausgeben

Export nach Pickle

Beispiel

import pandas as pd

df = pd.DataFrame({
    "A": [1, 2, 3],
    "B": ["a", "b", "c"]
})

# Export nach Pickle (Datentypen beibehalten)
df.to_pickle("data.pkl")

# Komprimiertes Format
df.to_pickle("data.pkl.gz", compression="gzip")

print("Pickle-Export abgeschlossen")

Export großer Datenmengen

Beim Exportieren großer Datenmengen müssen Sie auf Speicher- und Performance-Probleme achten.

Beispiel

import pandas as pd

# Empfehlungen für den Export großer Datenmengen:
# 1. Verwenden Sie chunksize, um batchweise zu schreiben
df = pd.DataFrame({"a": range(1000000), "b": range(1000000)})

# CSV in Blöcken schreiben
csv_path = "large_output.csv"
df.to_csv(csv_path, index=False, chunksize=100000)

# 2. Verwenden Sie ein effizienteres Format (Parquet)
df.to_parquet("large_output.parquet", index=False)

# 3. Verwenden Sie ein komprimiertes Format, um IO zu reduzieren
df.to_csv("large_output.csv.gz", index=False, compression="gzip")

print("Export großer Datenmengen abgeschlossen")

Häufige Probleme und Überlegungen

1. Excel öffnet CSV-Dateien mit unleserlichem Text

Verwenden Sieutf-8-sigBeim Export mit Kodierung kann Excel Chinesisch korrekt erkennen.

2. Unzureichender Arbeitsspeicher beim Export großer Datenmengen

Verwenden SiechunksizeParameter stapelweise schreiben oder das Parquet-Format anstelle von CSV verwenden.

3. Datums- und Zeitformat verloren

Beim Export nach CSV wird es in einen String umgewandelt. Sie könnendate_formatParameter angeben, um das Format zu steuern.

4. Typkonflikt beim Export in eine Datenbank

Sie könnendtypeParameter, um Spaltentypen explizit anzugeben.

Für die tägliche Datenanalyse wird das Parquet-Format empfohlen. Es bietet Vorteile wie eine hohe Komprimierungsrate, schnelles Lesen/Schreiben und die Beibehaltung von Datentypen. Verwenden Sie Excel- oder CSV-Formate nur, wenn eine manuelle Ansicht oder Weitergabe erforderlich ist.

Weitere Erweiterungen