Ibis ist die portable Python-Datenrahmenbibliothek:
Sehen Sie sich die Dokumentation zu „Warum Ibis?“ an. um mehr zu erfahren.
Sie können Ibis mit einem Backend und Beispieldaten pip install
:
pip install ' ibis-framework[duckdb,examples] '
Tipp
Weitere Installationsoptionen finden Sie im Installationshandbuch.
Dann nutzen Sie Ibis:
> >> import ibis
> >> ibis . options . interactive = True
> >> t = ibis . examples . penguins . fetch ()
> >> t
┏━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━┓
┃ species ┃ island ┃ bill_length_mm ┃ bill_depth_mm ┃ flipper_length_mm ┃ body_mass_g ┃ sex ┃ year ┃
┡━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━┩
│ string │ string │ float64 │ float64 │ int64 │ int64 │ string │ int64 │
├─────────┼───────────┼────────────────┼───────────────┼───────────────────┼─────────────┼────────┼───────┤
│ Adelie │ Torgersen │ 39.1 │ 18.7 │ 181 │ 3750 │ male │ 2007 │
│ Adelie │ Torgersen │ 39.5 │ 17.4 │ 186 │ 3800 │ female │ 2007 │
│ Adelie │ Torgersen │ 40.3 │ 18.0 │ 195 │ 3250 │ female │ 2007 │
│ Adelie │ Torgersen │ NULL │ NULL │ NULL │ NULL │ NULL │ 2007 │
│ Adelie │ Torgersen │ 36.7 │ 19.3 │ 193 │ 3450 │ female │ 2007 │
│ Adelie │ Torgersen │ 39.3 │ 20.6 │ 190 │ 3650 │ male │ 2007 │
│ Adelie │ Torgersen │ 38.9 │ 17.8 │ 181 │ 3625 │ female │ 2007 │
│ Adelie │ Torgersen │ 39.2 │ 19.6 │ 195 │ 4675 │ male │ 2007 │
│ Adelie │ Torgersen │ 34.1 │ 18.1 │ 193 │ 3475 │ NULL │ 2007 │
│ Adelie │ Torgersen │ 42.0 │ 20.2 │ 190 │ 4250 │ NULL │ 2007 │
│ … │ … │ … │ … │ … │ … │ … │ … │
└─────────┴───────────┴────────────────┴───────────────┴───────────────────┴─────────────┴────────┴───────┘
>> > g = t . group_by ( "species" , "island" ). agg ( count = t . count ()). order_by ( "count" )
> >> g
┏━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━┓
┃ species ┃ island ┃ count ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━┩
│ string │ string │ int64 │
├───────────┼───────────┼───────┤
│ Adelie │ Biscoe │ 44 │
│ Adelie │ Torgersen │ 52 │
│ Adelie │ Dream │ 56 │
│ Chinstrap │ Dream │ 68 │
│ Gentoo │ Biscoe │ 124 │
└───────────┴───────────┴───────┘
Tipp
Eine vollständige Einführung in Ibis finden Sie im Tutorial „Erste Schritte“.
Für die meisten Backends kompiliert Ibis seine Datenrahmenausdrücke in SQL:
> >> ibis . to_sql ( g )
SELECT
"t1" . "species" ,
"t1" . "island" ,
"t1" . "count"
FROM (
SELECT
"t0" . "species" ,
"t0" . "island" ,
COUNT ( * ) AS "count"
FROM "penguins" AS "t0"
GROUP BY
1 ,
2
) AS "t1"
ORDER BY
"t1" . "count" ASC
Sie können SQL- und Python-Code mischen:
> >> a = t . sql ( "SELECT species, island, count(*) AS count FROM penguins GROUP BY 1, 2" )
> >> a
┏━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━┓
┃ species ┃ island ┃ count ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━┩
│ string │ string │ int64 │
├───────────┼───────────┼───────┤
│ Adelie │ Torgersen │ 52 │
│ Adelie │ Biscoe │ 44 │
│ Adelie │ Dream │ 56 │
│ Gentoo │ Biscoe │ 124 │
│ Chinstrap │ Dream │ 68 │
└───────────┴───────────┴───────┘
>> > b = a . order_by ( "count" )
> >> b
┏━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━┓
┃ species ┃ island ┃ count ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━┩
│ string │ string │ int64 │
├───────────┼───────────┼───────┤
│ Adelie │ Biscoe │ 44 │
│ Adelie │ Torgersen │ 52 │
│ Adelie │ Dream │ 56 │
│ Chinstrap │ Dream │ 68 │
│ Gentoo │ Biscoe │ 124 │
└───────────┴───────────┴───────┘
Dadurch können Sie die Flexibilität von Python mit der Skalierbarkeit und Leistung von modernem SQL kombinieren.
Ibis unterstützt fast 20 Backends:
Die meisten Python-Datenrahmen sind eng mit ihrer Ausführungs-Engine verbunden. Und viele Datenbanken unterstützen nur SQL, ohne Python-API. Ibis löst dieses Problem, indem es eine gemeinsame API für die Datenbearbeitung in Python bereitstellt und diese API in die Muttersprache des Backends kompiliert. Das bedeutet, dass Sie eine einzelne API erlernen und sie in jedem unterstützten Backend (Ausführungs-Engine) verwenden können.
Ibis unterstützt im Großen und Ganzen zwei Arten von Backends:
Um verschiedene Backends zu verwenden, können Sie festlegen, welche Backends Ibis verwendet:
> >> ibis . set_backend ( "duckdb" )
> >> ibis . set_backend ( "polars" )
> >> ibis . set_backend ( "datafusion" )
Normalerweise erstellen Sie ein Verbindungsobjekt:
> >> con = ibis . duckdb . connect ()
> >> con = ibis . polars . connect ()
> >> con = ibis . datafusion . connect ()
Und arbeiten Sie mit Tabellen in diesem Backend:
> >> con . list_tables ()
[ 'penguins' ]
> >> t = con . table ( "penguins" )
Sie können auch aus gängigen Dateiformaten wie CSV oder Apache Parquet lesen:
> >> t = con . read_csv ( "penguins.csv" )
> >> t = con . read_parquet ( "penguins.parquet" )
Dadurch können Sie lokal iterieren und remote bereitstellen, indem Sie eine einzige Codezeile ändern.
Tipp
Schauen Sie sich den Blog über Backend-agnostische Arrays an, um ein Beispiel zu sehen, bei dem derselbe Code für DuckDB und BigQuery verwendet wird.
Ibis ist ein Open-Source-Projekt und freut sich über Beiträge von jedem in der Community.
Treten Sie unserer Community bei, indem Sie auf GitHub interagieren oder mit uns auf Zulip chatten.
Weitere Informationen finden Sie unter https://ibis-project.org/.
Das Ibis-Projekt ist ein unabhängig verwaltetes Open-Source-Community-Projekt zur Erstellung und Pflege der portablen Python-Datenrahmenbibliothek. Ibis hat Mitwirkende aus einer Reihe von Datenunternehmen und -institutionen.