Polars für Rust: Vollständiges Tutorial mit Beispielen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Polars-Bibliothek für Rust: Das vollständige Handbuch

Polars ist eine leistungsstarke DataFrame-Bibliothek für die Datenanalyse, die in Rust geschrieben ist. Sie bietet eine vertraute API, die an pandas erinnert, übertrifft dieses jedoch deutlich in Geschwindigkeit und Speichereffizienz. Während pandas oft an die Grenzen der Single-Thread-Ausführung und des Arbeitsspeichers stößt, wurde Polars von Grund auf für den Multithread-Betrieb konzipiert und nutzt Lazy Evaluation (Lazy API) zur Optimierung von Abfragen.

Das Hauptziel von Polars ist es, ein Werkzeug für die Verarbeitung großer Datenmengen (von Hunderten Megabyte bis zu mehreren Terabyte) auf einem einzigen Knoten bereitzustellen, ohne auf verteilte Systeme wie Spark zurückgreifen zu müssen. Dies wird durch effizientes Speichermanagement (Zero-Copy, Nutzung von Apache Arrow als Backend), Vektorisierung von Operationen und automatische Parallelisierung erreicht. Für Rust-Entwickler ist Polars nicht nur ein Wrapper um eine Python-Bibliothek, sondern eine native Bibliothek, die die Stärken der Sprache voll ausschöpft: Speichersicherheit, Typsystem und hohe Leistung.

Die Bibliothek bietet zwei APIs: Eager (sofortige Ausführung) und Lazy (verzögerte Ausführung). Die Eager API eignet sich für interaktives Arbeiten und kleine Datensätze, bei denen das Ergebnis sofort sichtbar sein soll. Die Lazy API ermöglicht die Erstellung eines Abfrageplans, der dann optimiert und in einem Durchlauf ausgeführt wird – entscheidend für komplexe Transformationen und große Datenmengen. Polars unterstützt zudem CSV, Parquet, JSON, IPC (Arrow) und Datenbanken via SQL.

Installation

Um Polars in Ihr Rust-Projekt einzubinden, fügen Sie die Abhängigkeit in Ihre Cargo.toml ein:

[dependencies]
polars = "0.44.0"  // Prüfen Sie die aktuelle Version auf crates.io

Wenn Sie zusätzliche Funktionen benötigen (z. B. Unterstützung für reguläre Ausdrücke in Strings, Datumsfunktionen oder SQL-Integration), aktivieren Sie die entsprechenden Features:

[dependencies]
polars = { version = "0.44.0", features = ["lazy", "strings", "dtype-date", "dtype-datetime", "sql", "parquet", "csv"] }

Wichtige Features im Überblick:

  • lazy – Lazy API (für ernsthafte Projekte unverzichtbar)
  • strings – Methoden für String-Operationen (contains, replace, extract)
  • dtype-date, dtype-datetime – Unterstützung für Datumstypen
  • sql – SQL-Schnittstelle
  • parquet – Lesen/Schreiben von Parquet-Dateien
  • csv – Lesen/Schreiben von CSV-Dateien
  • is_in, rank, moment – Zusätzliche Methoden

Führen Sie nach dem Hinzufügen der Abhängigkeit aus:

cargo build

Schnellstart

Ein minimales, funktionsfähiges Beispiel zum Erstellen eines DataFrames und Ausführen einer einfachen Abfrage:

use polars::prelude::*;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // DataFrame aus Vektoren erstellen
    let df = df! [
        "name" => &["Alice", "Bob", "Charlie"],
        "age" => &[25, 30, 35],
        "salary" => &[50000, 60000, 70000]
    ]?;

    println!("Original DataFrame:\n{:?}", df);

    // Filtern: Wer ist älter als 28?
    let filtered = df.clone().lazy()
        .filter(col("age").gt(lit(28)))
        .collect()?;

    println!("Gefiltert (Alter > 28):\n{:?}", filtered);

    // Aggregation: Durchschnittsgehalt berechnen
    let avg_salary = df.clone().lazy()
        .select([col("salary").mean().alias("avg_salary")])
        .collect()?;

    println!("Durchschnittsgehalt:\n{:?}", avg_salary);

    Ok(())
}

Dieser Code erstellt eine Tabelle mit drei Spalten, filtert Zeilen nach dem Alter und berechnet das Durchschnittsgehalt. Beachten Sie die Verwendung von lazy() – selbst für einfache Operationen wird dies empfohlen.

Empfehlungen