Die Arbeit mit Daten ist das Herzstück der Data Science. Damit du Daten analysieren kannst, musst du sie zuerst einlesen (Input, kurz: I) und später häufig wieder speichern (Output, kurz: O). Außerdem brauchst du manchmal Möglichkeiten, Daten zwischenzuspeichern oder zu übertragen – das nennt man Serialisierung.
Grundbegriffe
- I/O (Input/Output):
Bezeichnet den Austausch von Daten zwischen deinem Python-Programm und einer externen Quelle.
Beispiele: eine CSV-Datei einlesen, Datenbankabfragen durchführen oder Ergebnisse als Excel-Datei speichern. - Serialisierung:
Der Prozess, Python-Objekte (z. B. Listen, Dictionaries oder ganze DataFrames) in ein Format zu verwandeln, das gespeichert oder über das Netzwerk verschickt werden kann. Später kannst du sie wieder deserialisieren (zurück in Python-Objekte umwandeln). - Dateiformate:
Unterschiedliche Formate haben unterschiedliche Stärken:- CSV (Comma Separated Values): Einfach, aber ineffizient bei großen Daten.
- JSON (JavaScript Object Notation): Gut für verschachtelte Daten.
- Parquet: Spaltenbasiert, sehr effizient für Big Data.
- Pickle: Python-spezifisch, sehr flexibel – aber Vorsicht bei der Sicherheit!
Dateien lesen und schreiben
Textdateien (CSV, TXT)
Eine CSV-Datei ist eine Tabelle, deren Spalten durch ein Trennzeichen (meist , oder ;) getrennt sind.
import pandas as pd
# CSV einlesen
df = pd.read_csv("daten.csv")
# CSV speichern
df.to_csv("daten_kopie.csv", index=False)
👉 index=False bedeutet, dass die Zeilennummern nicht mitgespeichert werden.
JSON-Dateien
JSON ist ein textbasiertes Format, das oft bei APIs verwendet wird. Es kann verschachtelte Strukturen abbilden.
import pandas as pd
# JSON einlesen
df = pd.read_json("daten.json")
# JSON speichern
df.to_json("daten_kopie.json", orient="records", lines=True)
👉 orient="records" sorgt dafür, dass jede Zeile ein JSON-Objekt ist – praktisch für Logfiles oder APIs.
Parquet-Dateien
Parquet ist spaltenbasiert, speichersparend und schnell. Besonders im Big-Data-Umfeld wird es häufig genutzt.
import pandas as pd
# Parquet einlesen
df = pd.read_parquet("daten.parquet")
# Parquet speichern
df.to_parquet("daten_kopie.parquet", index=False)
Serialisierung in Python
Mit Pickle
Pickle ist Pythons eingebautes Werkzeug zur Serialisierung. Damit kannst du beliebige Python-Objekte speichern.
import pickle
daten = {"Name": "Anna", "Alter": 29, "Skills": ["Python", "SQL"]}
# Serialisieren (speichern)
with open("daten.pkl", "wb") as f:
pickle.dump(daten, f)
# Deserialisieren (laden)
with open("daten.pkl", "rb") as f:
geladen = pickle.load(f)
print(geladen)
⚠️ Achtung: Pickle-Dateien können beim Laden beliebigen Code ausführen. Verwende sie daher nur mit vertrauenswürdigen Quellen.
Mit JSON
JSON ist sicherer und oft plattformunabhängig. Python hat ein eigenes Modul dafür.
import json
daten = {"Name": "Anna", "Alter": 29, "Skills": ["Python", "SQL"]}
# Speichern
with open("daten.json", "w") as f:
json.dump(daten, f)
# Laden
with open("daten.json", "r") as f:
geladen = json.load(f)
print(geladen)
Arbeiten mit pathlib
Statt Dateipfade als einfache Strings zu behandeln, ist es in Python moderner, mit pathlib zu arbeiten.
from pathlib import Path
import pandas as pd
pfad = Path("daten") / "input" / "daten.csv"
df = pd.read_csv(pfad)
👉 Vorteil: pathlib ist betriebssystem-unabhängig (Windows \, Linux/Mac /).
Best Practices
- Datenformate bewusst wählen:
- CSV → Austausch mit Excel & Co.
- JSON → APIs & verschachtelte Daten.
- Parquet → Große Datenmengen, Data Lakes.
- Pickle → Nur intern und vertrauenswürdig.
- Reproduzierbarkeit sicherstellen:
Immer absolute oder relative Pfade klar dokumentieren und Versionierung beachten. - Speicherplatz beachten:
Parquet/Feather nutzen, wenn Geschwindigkeit und Platz zählen.