Pandas Daten lesen und schreiben
Pandas bietet eine Vielzahl von Funktionen zum Lesen und Schreiben verschiedener Datenformate. Neben den häufig verwendeten Formaten CSV und Excel unterstützt es auch SQL-Datenbanken, HTML-Tabellen, Parquet und andere Formate. Dieser Abschnitt stellt diese ergänzenden I/O-Funktionen vor, damit Sie Datenimport und -export in verschiedenen Szenarien flexibel handhaben können.
Überblick über die Kern-I/O-Funktionen
Die I/O-Funktionalität von Pandas ist sehr leistungsstark und unterstützt das Lesen und Schreiben mehrerer Datenformate. Im Folgenden sind häufig verwendete Lese- und Schreibfunktionen aufgeführt:
| Lesefunktionen | Schreibfunktionen | Unterstützte Formate | Typische Szenarien |
|---|---|---|---|
pd.read_csv() |
to_csv() |
CSV, TSV | Logdateien, tabellarische Daten |
pd.read_excel() |
to_excel() |
Excel(.xlsx, .xls) | Geschäftsberichte, Finanzdaten |
pd.read_sql() |
to_sql() |
SQL-Datenbanken | Interaktion mit Unternehmensdatenbanken |
pd.read_html() |
- | HTML-Tabellen | Web-Daten-Scraping |
pd.read_parquet() |
to_parquet() |
Apache Parquet | Big-Data-Analyse, Speicherung |
pd.read_feather() |
to_feather() |
Feather-Format | Schnelles Lesen/Schreiben, In-Memory-Daten |
pd.read_json() |
to_json() |
JSON | API-Daten, Webdienste |
pd.read_pickle() |
to_pickle() |
Python pickle | Python-Objekte serialisieren |
Verschiedene Formate haben unterschiedliche Anwendungsszenarien. CSV ist ein universelles Format, aber die Dateien sind groß; Parquet ist spaltenorientierte Speicherung, geeignet für Big-Data-Analysen; Excel eignet sich für die manuelle Ansicht, aber nicht für große Datenmengen.
CSV- und Textdateien
CSV (Comma-Separated Values) ist das universellste Datenaustauschformat, und Pandas bietet die vollständigste Unterstützung dafür.
Häufige Leseparameter
Beispiel
# Grundlegendes Lesen
df = pd.read_csv("data.csv")
# Trennzeichen angeben (CSV standardmäßig Komma, TSV Tabulator)
df_tsv = pd.read_csv("data.tsv", sep="\t")
# Kodierung angeben (häufig für chinesische Dateien verwendet)
df_utf8 = pd.read_csv("data.csv", encoding="utf-8")
df_gbk = pd.read_csv("data.csv", encoding="gbk")
# Zeilen überspringen (Zeilen nach der Kopfzeile oder Kommentarzeilen überspringen)
df = pd.read_csv("data.csv", skiprows=3) # Die ersten 3 Zeilen überspringen
df = pd.read_csv("data.csv", skiprows=[2, 4]) # Zeilen 2 und 4 überspringen
# Die Kopfzeile verwenden (standardmäßig erste Zeile)
df = pd.read_csv("data.csv", header=0) # Zeile 0 als Kopfzeile verwenden
df = pd.read_csv("data.csv", header=None) # Keine Kopfzeile verwenden, 0,1,2... automatisch generieren
# Spaltennamen angeben
df = pd.read_csv("data.csv", names=["ID", "Name", "Age", "City"])
# Die Indexspalte angeben
df = pd.read_csv("data.csv", index_col=0) # Spalte 0 als Index verwenden
df = pd.read_csv("data.csv", index_col=["Name"]) # Mehrere Spalten als zusammengesetzter Index
Umgang mit fehlenden Werten
Beispiel
import numpy as np
# Angeben, welche Werte als fehlende Werte behandelt werden
df = pd.read_csv(
"data.csv",
na_values=["NA", "null", "NULL", "N/A", "", " "] # Diese Werte werden alle als NaN erkannt
)
# Verschiedene Spalten können unterschiedliche Marker für fehlende Werte verwenden
df = pd.read_csv(
"data.csv",
na_values={
"Age": ["Unknown", "0"], # Fehlender Wert für die Spalte "Age"
"City": ["Unknown"] # Fehlender Wert für die Spalte "City"
}
)
# Bestimmte Werte als normale Werte beibehalten (nicht als fehlende Werte erkannt)
df = pd.read_csv("data.csv", keep_default_na=False)
CSV-Dateien schreiben
Beispiel
# Testdaten vorbereiten
df = pd.DataFrame({
"Name": ["Zhang San", "Li Si", "Wang Wu"],
"Alter": [25, 30, 28],
"City": ["Beijing", "Shanghai", "Guangzhou"]
})
# CSV schreiben (standardmäßig mit Index)
df.to_csv("output.csv")
# Index nicht schreiben
df.to_csv("output.csv", index=False)
# Trennzeichen angeben
df.to_csv("output.csv", sep="\t")
# Den Header nicht schreiben
df.to_csv("output.csv", header=False)
# Kodierung angeben
df.to_csv("output.csv", encoding="utf-8-sig") # Mit BOM, geeignet zum Öffnen in Excel
JSON-Dateien
JSON (JavaScript Object Notation) ist das gebräuchlichste Datenformat in Webanwendungen. Pandas bietet flexible Lese- und Schreibfunktionen.
JSON-Struktur und Lesemethoden
JSON-Datenstrukturen gibt es in vielen Formen. Beim Lesen müssen Sie geeignete Parameter basierend auf der tatsächlichen Struktur auswählen:
Beispiel
import json
# Test-JSON-Daten vorbereiten
data_records = '''
[
{"name": "Zhang San", "age": 25, "city": "Beijing"},
{"name": "Li Si", "age": 30, "city": "Shanghai"},
{"name": "Wang Wu", "age": 28, "city": "Guangzhou"}
]
'''
# Methode 1: JSON-Array (ein Objekt pro Zeile) -> DataFrame
df = pd.read_json(data_records, orient="records")
print("orient='records':")
print(df)
print()
# Methode 2: JSON-Objekt (Schlüssel-Wert-Paare) -> Series
data_dict = '{"name": "Zhang San", "age": 25, "city": "Beijing"}'
s = pd.read_json(data_dict, typ="series")
print("Als Series gelesen:")
print(s)
JSON-Lines-Format
JSON Lines (.jsonl) ist ein Format, bei dem jede Zeile ein vollständiges JSON-Objekt ist. Es wird häufig in Log- und Big-Data-Szenarien verwendet:
Beispiel
# Daten im JSON-Lines-Format
jsonl_data = '''{"name": "Zhang San", "age": 25}
{"name": "Li Si", "age": 30}
{"name": "Wang Wu", "age": 28}
{"name": "Zhao Liu", "age": 35}
'''
# JSON-Lines-Datei schreiben
with open("data.jsonl", "w", encoding="utf-8") as f:
f.write(jsonl_data)
# JSON Lines lesen (jede Zeile ist ein JSON-Objekt)
df = pd.read_json("data.jsonl", lines=True)
print(df)
JSON schreiben
Beispiel
df = pd.DataFrame({
"Name": ["Zhang San", "Li Si", "Wang Wu"],
"Alter": [25, 30, 28],
"City": ["Beijing", "Shanghai", "Guangzhou"]
})
# JSON mit unterschiedlicher Ausrichtung schreiben
df.to_json("output_records.json", orient="records", force_ascii=False, indent=2)
df.to_json("output_index.json", orient="index", force_ascii=False, indent=2)
df.to_json("output_columns.json", orient="columns", force_ascii=False, indent=2)
# JSON-Lines-Format
df.to_json("output.jsonl", orient="records", lines=True, force_ascii=False)
Pickle-Serialisierung
Pickle ist Pythons natives Objekt-Serialisierungsformat, das jedes Python-Objekt speichern kann, einschließlich DataFrames und komplexer verschachtelter Strukturen.
Beispiel
import pickle
# Ein DataFrame mit einer komplexen Struktur erstellen
df = pd.DataFrame({
"A": range(10),
"B": range(10, 20),
"C": ["foo", "bar"] * 5
})
# Pickle-Datei schreiben
df.to_pickle("data.pkl")
# Pickle-Datei lesen
df_loaded = pd.read_pickle("data.pkl")
print(df_loaded)
# Komprimiertes Schreiben (gzip-Komprimierung, kleinere Datei)
df.to_pickle("data.pkl.gz", compression="gzip")
df_loaded = pd.read_pickle("data.pkl.gz", compression="gzip")
Das Pickle-Format kann nur von Python gelesen werden und eignet sich nicht für den sprachübergreifenden Datenaustausch. Darüber hinaus birgt das Laden von Pickle-Dateien aus nicht vertrauenswürdigen Quellen ein Sicherheitsrisiko; laden Sie keine .pkl-Dateien unbekannter Herkunft.
Leistung und Szenarioauswahl
Verschiedene Datenformate haben unterschiedliche Leistungsmerkmale. Die Wahl des geeigneten Formats kann die Effizienz erheblich verbessern:
| Format | Lesegeschwindigkeit | Schreibgeschwindigkeit | Dateigröße | Anwendungsfall |
|---|---|---|---|---|
| CSV | Langsam | Mittel | groß | Universelles Austauschformat, menschenlesbar |
| Parquet | Sehr schnell | Schnell | Sehr klein | Big-Data-Analyse, spaltenbasierte Abfrage |
| Feather | Extrem schnell | Extrem schnell | groß | Schnelle In-Memory-Datenübertragung |
| Pickle | Schnell | Schnell | Mittel | Python-Objektpersistenz |
| JSON | Langsam | Mittel | Sehr groß | Web-API, sprachübergreifend |
Häufige Probleme und Vorsichtsmaßnahmen
1. Nicht genügend Arbeitsspeicher beim Lesen großer Dateien
Bei sehr großen CSV- oder JSON-Dateien können Sie denchunksizeParameter verwenden, um in Blöcken zu lesen und zu vermeiden, alles auf einmal in den Speicher zu laden.
2. Probleme mit der chinesischen Zeichenkodierung
Beim Verarbeiten chinesischer Dateien stellen Sie sicher, dass die korrekte Kodierung angegeben wird. Häufige Kodierungen sind utf-8, gbk, gb2312, utf-8-sig (BOM) usw.
3. Datei nach dem Schreiben beschädigt
Bevor Sie wichtige Daten schreiben, wird empfohlen, zuerst zu lesen und zu überprüfen. Beim Schreiben großer Dateien kann die Verwendung eines komprimierten Formats die Festplatten-I/O reduzieren und das Risiko einer Datenbeschädigung verringern.
4. Einschränkungen des Excel-Formats
Excel 2003 (.xls) unterstützt maximal 65,536 Zeilen pro Blatt, während Excel 2007 (.xlsx) bis zu 1,048,576 Zeilen unterstützt. Wenn das Limit überschritten wird, ziehen Sie bitte andere Formate in Betracht.
Andere Erweiterungen