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
# 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
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
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
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
# 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
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
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
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
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
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
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
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
# 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.
Weitere ErweiterungenFü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.