Zum Inhalt springen

Relationale API auf Pandas

DuckDB bietet eine relationale API, mit der sich Abfrageoperationen verketten lassen. Diese werden verzögert ausgewertet, sodass DuckDB ihre Ausführung optimieren kann. Die Operatoren können auf Pandas-DataFrames, DuckDB-Tabellen oder Views wirken (die auf jedes zugrunde liegende Speicherformat zeigen können, das DuckDB lesen kann, z. B. CSV- oder Parquet-Dateien). Hier zeigen wir ein einfaches Beispiel: Lesen aus einem Pandas-DataFrame und Rückgabe eines DataFrames.

import duckdb
import pandas
# connect to an in-memory database
con = duckdb.connect()
input_df = pandas.DataFrame.from_dict({'i': [1, 2, 3, 4],
'j': ["one", "two", "three", "four"]})
# create a DuckDB relation from a dataframe
rel = con.from_df(input_df)
# chain together relational operators (this is a lazy operation, so the operations are not yet executed)
# equivalent to: SELECT i, j, i*2 AS two_i FROM input_df WHERE i >= 2 ORDER BY i DESC LIMIT 2
transformed_rel = rel.filter('i >= 2').project('i, j, i*2 AS two_i').order('i DESC').limit(2)
# trigger execution by requesting .df() of the relation
# .df() could have been added to the end of the chain above - it was separated for clarity
output_df = transformed_rel.df()

Relationale Operatoren können auch verwendet werden, um Zeilen zu gruppieren, zu aggregieren, eindeutige Wertekombinationen zu finden, zu joinen, zu vereinigen und mehr. Sie können Ergebnisse außerdem direkt in eine DuckDB-Tabelle einfügen oder in eine CSV-Datei schreiben.

Weitere Beispiele und die verfügbaren relationalen Methoden der Klasse DuckDBPyRelation finden Sie hier.