arrow arrow--cut calendar callback check chevron chevron--large cross cross--large download filter kununu linkedin magnifier mail marker media-audio media-blog media-video menu minus Flieger phone play plus quote share youtube

Pandas bleibt - aber nicht allein

Wie wir unsere Datenanalyse mit Polars und DuckDB erweitert haben

Lange war Pandas das Werkzeug unserer Wahl für schnelle, flexible Datenanalysen in Python. Ob Ad-hoc-Auswertung, erste Datenexploration oder CSV-Import: Die API ist intuitiv, die Community riesig, und das Tool funktioniert einfach. Doch mit wachsenden Datenmengen stoßen wir im Projektalltag zunehmend an Grenzen: 

  • Pandas verarbeitet Daten vollständig im Arbeitsspeicher, was bei größeren Dateien schnell zu Speicherproblemen führen kann.
  • Die meisten Operationen laufen außerdem nur auf einem CPU-Kern, was die Performance bei vielen Zeilen deutlich bremst. Besonders bei rechenintensiven Transformationen, komplexen Joins oder größeren GroupBy-Operationen stößt Pandas schnell an seine Belastungsgrenze.
Foto von Julian Schwöppe
Julian Schwöppe

Data Engineer

Ein weiteres Problem zeigt sich in der Zusammen­arbeit mit Nicht-Python-Nutzer*innen. Da Pandas keine SQL-Schnittstelle bietet und alle Operationen über Python-Code laufen, ist der Zugang für viele Personen ohne Python-Erfahrung erschwert. Gerade wenn SQL das bevorzugte Werkzeug ist, kann Pandas in der Kommunikation und im gemeinsamen Arbeiten schnell zur Hürde werden. Wenn Pandas an seine technischen und praktischen Grenzen stößt, lohnt sich ein Blick auf Alternativen. Genau hier setzen Tools wie Polars und DuckDB an: Sie bieten moderne Lösungen für große Datenmengen, ermöglichen parallele Verarbeitung und unterstützen SQL-basierte Analysen.  

Dieser Beitrag befasst sich damit, wie diese Tools die Schwächen von Pandas kompensieren können, welche Stärken und Schwächen sie jeweils mitbringen und wie sie den bestehenden Tech Stack sinnvoll erweitern.

Polars: Schnell, parallelisiert und speichereffizient

Polars ist ein modernes DataFrame-Tool für Python, das für hohe Verarbeitungsgeschwindigkeit und große Datenmengen entwickelt wurde. Die Engine basiert auf Rust und nutzt Technologien wie Apache Arrow und Multithreading, um Daten besonders performant und speichereffizient zu verarbeiten. Ein zentrales Konzept von Polars ist die sogenannte Lazy Execution: Anstatt jede Operation sofort auszuführen, sammelt Polars alle Schritte vorab, erstellt daraus einen optimierten Ausführungsplan und führt diesen in einem einzigen, effizienten Durchlauf aus. Dadurch werden unnötige Zwischenschritte vermieden, was besonders bei komplexen Transformationen und datengetriebenen ETL-Prozessen spürbare Vorteile bringt.

Polars zeigt seine Stärken vor allem bei der Verarbeitung großer Dateien im CSV- oder Parquet-Format, bei rechenintensiven Operationen wie GroupBy, Joins oder umfangreichen Datenumformungen. Im Bereich des maschinellen Lernens, etwa beim Feature Engineering, überzeugt das Tool durch seine Geschwindigkeit und den sparsamen Umgang mit Speicherressourcen. Anders als Pandas setzt Polars dabei konsequent auf eine funktionale API, was zwar zur Performance beiträgt, den Einstieg für viele Nutzer:innen aber auch etwas herausfordernder macht.

Trotz der hohen Effizienz bringt Polars auch einige Einschränkungen mit sich. In Bereichen wie Visualisierung, Excel-Export oder der Integration mit etablierten Python-Bibliotheken ist Pandas nach wie vor überlegen. Auch die ungewohnte Arbeitsweise erfordert eine gewisse Umstellung, besonders für Anwender:innen, die aus der objektorientierten Pandas-Welt kommen.

DuckDB: Lokale SQL-Analysen mit voller Power, ganz ohne Datenbank

DuckDB ist eine kompakte und leistungsstarke SQL-Datenbank, die speziell für analytische Aufgaben entwickelt wurde und direkt lokal eingesetzt werden kann. Sie bringt die Vorteile klassischer Data-Warehouse-Technologien in alltägliche Analyse-Workflows, ohne dass dafür ein Server oder aufwendige Einrichtung nötig ist. Die Engine basiert auf C++, arbeitet spaltenbasiert und führt SQL-Abfragen effizient aus. In der Praxis werden mit DuckDB große Datenquellen wie CSV- oder Parquet-Dateien direkt von der Festplatte verarbeitet, selbst wenn sie nicht in den Arbeitsspeicher passen. Anders als Pandas lädt DuckDB die Daten blockweise und ermöglicht dadurch schnelle Analysen, auch auf einfacher Hardware. Dadurch entfällt das vorherige Laden der gesamten Datei in den Speicher, was Speicherprobleme vermeidet und insbesondere bei sehr großen Dateien einen spürbaren Performancegewinn bringt. Durch die vertrauten SQL-Abfragen lassen sich Millionen von Zeilen effizient abfragen, filtern und aggregieren. Für viele, die aus der Datenbankwelt kommen oder SQL bevorzugen, wird DuckDB damit zu einer praktischen Ergänzung in datengetriebenen Workflows.

Ein weiterer Vorteil liegt in der nahtlosen Integration mit anderen Tools. DuckDB ist kompatibel mit Apache Arrow und arbeitet problemlos mit Pandas oder Polars zusammen. Ergebnisse lassen sich so direkt weiterverarbeiten, visualisieren oder exportieren. DuckDB stößt an Grenzen, wenn Transformationen nötig sind, die über klassische SQL-Abfragen hinausgehen. Auch bei unstrukturierten Daten oder speziellen Formaten kann es zu Einschränkungen kommen, da der Fokus auf tabellarischen Daten liegt. Außerdem verarbeitet DuckDB Daten ausschließlich lokal und stößt an Grenzen, wenn Datenmengen die Kapazität einer einzelnen Maschine übersteigen. Zusätzlich fehlt eine native DataFrame-API in Python, was die Arbeit für SQL-unerfahrene Nutzerinnen und Nutzer erschweren kann.

Eine aktuelle Empfehlung ist die neue DuckDB UI, die mit Version 1.2.1 eingeführt wurde und seitdem direkt nutzbar ist. Die webbasierte Oberfläche lässt sich über das Terminal oder per SQL-Befehl starten und ermöglicht es, SQL-Abfragen lokal im Browser auszuführen. Tabellen, Views und Spalten können dabei visuell erkundet werden, Abfragen lassen sich in interaktiven Notizbüchern strukturieren und direkt ausführen. Funktionen wie Autovervollständigung, Spaltenstatistiken oder Datenvorschau unterstützen bei der Analyse. Alle Daten und Prozesse bleiben vollständig lokal, was die UI zu einer praktischen Ergänzung für schnelle Analysen und exploratives Arbeiten macht. (Quelle: duckdb.org/2025/03/12/duckdb-ui.html)

Side-by-Side Comparison Pandas Polars DuckDB

Ein Performance-Vergleich aus der Praxis

In einem internen Test haben wir Pandas, Polars und DuckDB auf einen gemeinsamen Prüfstand gestellt. Ziel war es, typische Operationen wie GroupBy, Filter + Sort und Join auf einem Datensatz mit 10 Millionen Zeilen durchzuführen - jeweils mit identischer Logik und vergleichbaren Rahmenbedingungen.

Das Ergebnis überrascht nicht, bestätigt aber klar unseren Eindruck aus der Praxis:

  • Polars überzeugte durchgehend mit sehr kurzer Laufzeit und geringem Speicherverbrauch. Besonders bei Sortierungen und komplexen Joins konnte Polars seine Stärken durch Parallelisierung und effiziente Speicherverwaltung voll ausspielen.
  • DuckDB lag bei Aggregationen und Joins ebenfalls klar vor Pandas und punktete durch seine Fähigkeit, auch mit Daten jenseits des verfügbaren Arbeitsspeichers performant zu arbeiten. Die SQL-basierte Abfrage-Engine eignet sich besonders gut für analytische Workloads und lässt sich nahtlos in bestehende Pipelines integrieren.
  • Pandas blieb wie erwartet am langsamsten. Besonders bei größeren Joins und Sortierungen zeigte sich, dass Pandas durch sein Single-Threading und die vollständige In-Memory-Verarbeitung an seine Grenzen stößt.
Vergleich Pandas, Polars, DuckDB

Operation

Pandas (s)

Polars (s)

DuckDB (s)

Filter+Sort1.336370.375940.69028
GroupBy0.348770.090230.06645
Join1.516990.117740.41889

Diese Ergebnisse bestätigen unsere Erfahrungen aus Projekten: Pandas eignet sich hervorragend für kleinere Aufgaben, schnelle Ad-hoc-Analysen und exploratives Arbeiten. Sobald die Datenmengen jedoch wachsen oder mehrere Operationen in Folge effizient verarbeitet werden sollen, bieten Polars und DuckDB deutliche Vorteile - sowohl in Sachen Performance als auch beim Ressourcenverbrauch und der Skalierbarkeit.

Die Tools sinnvoll kombinieren: ein praxisnahes Beispiel

In der Realität geht es selten darum, das eine „richtige“ Tool auszuwählen. Der eigentliche Mehrwert liegt oft darin, die Stärken verschiedener Werkzeuge gezielt miteinander zu kombinieren.

Ein typisches Szenario aus unserem Arbeitsalltag

Wir starten mit Pandas, um uns schnell einen Überblick über die Daten zu verschaffen. Mit Funktionen wie df.head(), value_counts() und anderen grundlegenden Pandas-Methoden lässt sich schnell ein erster Überblick verschaffen und die Daten validieren. Dafür bleibt Pandas nach wie vor die erste Wahl. Geht es um größere Datenmengen, etwa beim Arbeiten mit vollständigen CSV-Dateien mit mehreren Millionen Zeilen, setzen wir auf DuckDB. Abfragen lassen sich im gewohnten SQL-Stil direkt auf der Datei ausführen, ohne sie vollständig in den Speicher zu laden. Filter, Joins oder Aggregationen werden so effizient umgesetzt, oft schneller als mit Pandas allein. In anderen Fällen steigen wir direkt auf Polars um, vor allem wenn komplexere Transformationen oder Feature Engineering anstehen. Polars überzeugt durch seine hohe Geschwindigkeit, speichereffiziente Verarbeitung und die Möglichkeit, mit Lazy Execution mehrere Verarbeitungsschritte zu bündeln und zu optimieren.

Ob DuckDB oder Polars zuerst zum Einsatz kommt, hängt vom konkreten Anwendungsfall ab. Beide Tools lassen sich gut in unsere Workflows integrieren und bringen jeweils eigene Stärken in unterschiedlichen Phasen der Datenverarbeitung ein. Für die Visualisierung oder den Export der finalen Daten, etwa als CSV, Excel oder zur Übergabe in Plotting-Libraries, greifen wir oft wieder zu Pandas. Hier bewährt sich die breite Kompatibilität mit externen Tools. Diese Kombination macht unsere Workflows nicht nur schneller, sondern auch robuster und zeigt, dass Pandas, Polars und DuckDB nicht in Konkurrenz stehen, sondern sich hervorragend ergänzen.

Hier gibt es noch mehr Data & Analytics:

Den besten Mix finden, statt sich auf ein Tool zu verlassen

Pandas, Polars und DuckDB sind keine Konkurrenten, sondern spezialisierte Werkzeuge, die sich ideal ergänzen. In modernen Datenpipelines geht es nicht darum, sich auf ein Tool festzulegen, sondern die Stärken jedes Werkzeugs dort einzusetzen, wo sie den größten Mehrwert bieten.

  • Pandas eignet sich hervorragend für die erste Datenexploration, schnelle Ad-hoc-Analysen und die finale Visualisierung oder den Export.
  • Polars überzeugt bei komplexen Transformationen, Feature Engineering und der performanten Verarbeitung großer Datenmengen.
  • DuckDB zeigt seine Stärken bei SQL-basierten Abfragen direkt auf Rohdaten, auch bei Datenmengen, die nicht vollständig in den Arbeitsspeicher passen.

Wer diese Tools sinnvoll kombiniert, profitiert nicht nur von performanten Workflows, sondern auch von Flexibilität, Lesbarkeit und Effizienz von der ersten Analyse bis zum fertigen Ergebnis.