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

import pandas as pd

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

import pandas as pd

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

import pandas as pd

# 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

import pandas as pd

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