8 Punkte von GN⁺ 2024-08-30 | 2 Kommentare | Auf WhatsApp teilen
  • Die pandas- und dask-Backends werden eingestellt und sollen in Version 10.0 entfernt werden
  • Es gibt keine funktionalen Unterschiede zwischen dem pandas-Backend und dem standardmäßigen DuckDB-Backend, während DuckDB deutlich leistungsfähiger ist
  • pandas-DataFrames können in Ibis weiterhin als Format für den Datenaustausch verwendet werden, aber das Ausführen von Abfragen mit pandas wird nicht mehr unterstützt
  • Der Großteil der Logik gilt auch für das dask-Backend; dask ist ein großartiges Projekt und sollte außerhalb von Ibis weiterhin genutzt werden

Warum pandas? Und die Geschichte von Ibis

  • In der Anfangszeit von Ibis gab es nur ein Impala-Backend
  • Später kam ein Postgres-Backend hinzu, aber die Installation war kompliziert, sodass Nutzer Ibis nicht einfach ausprobieren konnten
  • Es wurde ein Weg benötigt, die Ibis-API ohne zusätzliche Infrastruktur außerhalb eines Notebooks testen zu können
  • Damals war die Anbindung des einzigen In-Memory-DataFrame-Engines-Backends pandas die naheliegende Antwort

Die Schwierigkeiten des Pandas-Backends

  • pandas war damals die beste Wahl, passte aber nicht gut zum Datenanalysemodell von Ibis
  • Das pandas-Backend unterscheidet sich grundlegend von den anderen Backends und enthält den meisten Spezialcode
  • pandas ist im Kern eine Engine mit sofortiger Ausführung, während Ibis ein Modell mit verzögerter Ausführung verwendet
  • Es ist schwierig, die pandas-Schnittstelle in einem verzögerten Modell arbeiten zu lassen
  • Das pandas-Backend ist langsamer als andere Backends und erfordert dafür Tausende Zeilen Code
  • pandas-NaN und Ibis-NULL sind grundsätzlich unterschiedliche Konzepte, mussten aber als gleich behandelt werden
    • In pandas wurde NaN als Kennzeichnung für fehlende Werte verwendet, was jedoch Kompatibilitätsprobleme mit anderen Backends verursachte
    • NULL steht für fehlende Werte, NaN dafür, dass ein Wert keine Zahl ist — also grundlegend verschiedene Konzepte
  • Die neuen Arrow-basierten Typen in pandas sind eine große Verbesserung, bringen aber weiterhin Probleme mit sich

Verursacht Verwirrung bei neuen Nutzern

  • Menschen bevorzugen Vertrautes
  • Wer Ibis zum ersten Mal verwendet, muss sowohl Ibis als auch ein Backend auswählen
  • Neue Nutzer berichten oft: „Ibis ist langsam“
  • Das liegt meist daran, dass sie das pandas-Backend verwendet haben
  • Mit DuckDB oder Polars wäre der Einstieg deutlich einfacher gewesen

Funktionale Gleichwertigkeit

  • Der stärkste Grund für das Entfernen des pandas-Backends ist die Redundanz
  • Das DuckDB-Backend kann pandas-DataFrames nahtlos abfragen, unterstützt verschiedene Arten von UDFs und kann viele Formate wie parquet, CSV und JSON lesen und schreiben
  • DuckDB ist leicht zu installieren, läuft lokal, ist sehr schnell und interagiert gut mit dem Python-Ökosystem

Zusammenfassung von GN⁺

  • Die Entscheidung, DuckDB als Standard-Backend einzuführen, wirkt sehr klug. Es ist leicht zu installieren, läuft lokal, ist sehr schnell und interagiert gut mit dem Python-Ökosystem. Genau das war auch der Grund, warum Ibis ursprünglich pandas als Backend hinzugefügt hat
  • Dass pandas weiterhin als Format für den Datenaustausch verwendet werden kann, ist eine gute Nachricht für bestehende pandas-Nutzer. Vorhandener Code muss also nicht vollständig aufgegeben werden
  • pandas nicht länger für die Ausführung von Abfragen zu verwenden, scheint jedoch der richtige Weg zu sein. Das eager execution-Modell von pandas passt nicht zum Modell der verzögerten Ausführung von Ibis. Dadurch ist das pandas-Backend oft deutlich langsamer als die direkte Nutzung von pandas
  • Da Ibis immer mehr Backends unterstützt, wird die Wartung von Code, der auf bestimmte Backends zugeschnitten ist, zunehmend schwieriger. Das Entfernen des pandas-Backends dürfte die Codebasis sauberer und wartbarer machen
  • Wenn die Nutzung des DuckDB-Backends alle Funktionen von pandas ersetzen kann, gibt es offenbar keinen Grund, das pandas-Backend beizubehalten. Im Gegenteil: Es könnte neue Nutzer eher verwirren

2 Kommentare

 
yangeok 2024-09-03

In der Realität wird das vertrauteste pandas nach wie vor am häufigsten verwendet,,

 
GN⁺ 2024-08-30
Hacker-News-Kommentare
  • NaN ist das Ergebnis von 0/0 und bedeutet, dass ein Wert existiert, aber nicht genau bekannt ist

    • NULL bedeutet, dass der Wert an einer bestimmten Stelle unbekannt ist
    • Die Implementierungen von NaN und NULL unterscheiden sich, sind aber nicht völlig unabhängig voneinander
    • Pythons None ist weder NaN noch NULL
  • Es gibt viele bessere Rechen-Engines als pandas

    • Wegen bestehender Codebasen und Integrationen mit Drittanbietern wird pandas weiterhin verwendet
    • Für kleine Datenaufgaben ist pandas völlig ausreichend
  • In den letzten Monaten wurde in neuen Projekten pandas durch ibis ersetzt

    • Die Syntax von ibis ist flexibler als die von pandas
    • Verkettete Operationen machen Code-Snippets portabler
    • Das DuckDB-Backend ist sehr schnell
    • Die Community ist sehr aktiv und freundlich
    • ibis wird aktiv Kolleginnen und Kollegen empfohlen
  • Die MultiIndex-Funktion von pandas ist am mächtigsten

    • Sie kann auch für Spalten verwendet werden
    • Es ist unklar, wie neue Tools mit dieser Funktion umgehen werden
  • Es stellt sich die Frage, ob Polars in Betracht gezogen wurde

    • In der Gruppe wird pandas nicht gemocht, deshalb wird Polars als Standard verwendet
  • pandas ist auf neue Arten von Spalten erweiterbar

    • Es ist nicht sicher, ob Polars das unterstützt
  • Der Wert von Ibis liegt nicht darin, dass man DuckDB nutzen kann

    • Selbst wenn neue Tools erscheinen, funktioniert die Syntax weiter
  • Von Ibis wurde bisher nicht viel gehört

    • Wenn man sich von pandas entfernt, ist es unwahrscheinlicher, dass Ibis ausprobiert wird
    • Neue Frameworks lösen sich von pandas/numpy, aber es wird abgewartet, bis Kompatibilität und Edge Cases gelöst sind
    • Ein paar Millisekunden mehr Wartezeit sind kein Problem
  • Die Bibliotheks-API von pandas ist nicht immer intuitiv

    • Es gibt zwar das NaN/None-Problem, aber das ist nur eine kleine Unannehmlichkeit
  • Der Grund für die Nutzung von pandas ist das integrierte Ökosystem

    • Beim Einlesen von Daten aus JSON-Dateien, CSV-Dateien, Python-dicts usw. und bei der Visualisierung mit plotly ist pandas praktisch
    • Wenn Ibis mit pandas-DataFrames kompatibel ist, ist das Backend nicht besonders wichtig