5 leichte Alternativen zu Pandas, die Sie ausprobieren sollten5 leichte Alternativen zu Pandas, die Sie ausprobieren sollten
Bild vom Autor

# Einführung

Entwickler verwenden Pandas für die Datenmanipulation, kann jedoch langsam sein, insbesondere bei großen Datensätzen. Aus diesem Grund suchen viele nach schnelleren und leichteren Alternativen. Bei diesen Optionen bleiben die für die Analyse erforderlichen Kernfunktionen erhalten, wobei der Schwerpunkt auf Geschwindigkeit, geringerem Speicherbedarf und Einfachheit liegt. In diesem Artikel betrachten wir fünf leichte Alternativen zu Pandas, die Sie ausprobieren können.

# 1. DuckDB

DuckDB ist wie SQLite für Analytik. Sie können SQL-Abfragen direkt für CSV-Dateien (Comma-Separated Values) ausführen. Dies ist nützlich, wenn Sie SQL kennen oder mit Pipelines für maschinelles Lernen arbeiten. Installieren Sie es mit:

Wir werden den Titanic-Datensatz verwenden und eine einfache SQL-Abfrage wie folgt ausführen:

import duckdb

url = "https://uncooked.githubusercontent.com/mwaskom/seaborn-data/grasp/titanic.csv"

# Run SQL question on the CSV
end result = duckdb.question(f"""
    SELECT intercourse, age, survived
    FROM read_csv_auto('{url}')
    WHERE age > 18
""").to_df()

print(end result.head())

Ausgabe:


      intercourse     age   survived
0     male    22.0          0
1   feminine    38.0          1
2   feminine    26.0          1
3   feminine    35.0          1
4     male    35.0          0

DuckDB führt die SQL-Abfrage direkt in der CSV-Datei aus und konvertiert die Ausgabe dann in einen DataFrame. Sie erhalten SQL-Geschwindigkeit mit Python-Flexibilität.

# 2. Polaren

Polaren ist heute eine der beliebtesten Datenbibliotheken. Es ist in der implementiert Rost Sprache und ist außergewöhnlich schnell bei minimalem Speicherbedarf. Auch die Syntax ist sehr sauber. Installieren wir es mit pip:

Lassen Sie uns nun den Titanic-Datensatz verwenden, um ein einfaches Beispiel zu behandeln:

import polars as pl

# Load dataset 
url = "https://uncooked.githubusercontent.com/mwaskom/seaborn-data/grasp/titanic.csv"
df = pl.read_csv(url)

end result = df.filter(pl.col("age") > 40).choose(("intercourse", "age", "survived"))
print(end result)

Ausgabe:


form: (150, 3)
┌────────┬──────┬──────────┐
│ intercourse    ┆ age  ┆ survived │
│ ---    ┆ ---  ┆ ---      │
│ str    ┆ f64  ┆ i64      │
╞════════╪══════╪══════════╡
│ male   ┆ 54.0 ┆ 0        │
│ feminine ┆ 58.0 ┆ 1        │
│ feminine ┆ 55.0 ┆ 1        │
│ male   ┆ 66.0 ┆ 0        │
│ male   ┆ 42.0 ┆ 0        │
│ …      ┆ …    ┆ …        │
│ feminine ┆ 48.0 ┆ 1        │
│ feminine ┆ 42.0 ┆ 1        │
│ feminine ┆ 47.0 ┆ 1        │
│ male   ┆ 47.0 ┆ 0        │
│ feminine ┆ 56.0 ┆ 1        │
└────────┴──────┴──────────┘

Polars liest die CSV-Datei, filtert Zeilen basierend auf einer Altersbedingung und wählt eine Teilmenge der Spalten aus.

# 3. PyArrow

PyArrow ist eine leichtgewichtige Bibliothek für spaltenorientierte Daten. Instruments wie Polars verwenden Apache-Pfeil für Geschwindigkeit und Speichereffizienz. Es ist kein vollständiger Ersatz für Pandas, eignet sich jedoch hervorragend zum Lesen von Dateien und zur Vorverarbeitung. Installieren Sie es mit:

Für unser Beispiel verwenden wir den Iris-Datensatz im CSV-Format wie folgt:

import pyarrow.csv as csv
import pyarrow.compute as laptop
import urllib.request

# Obtain the Iris CSV 
url = "https://uncooked.githubusercontent.com/mwaskom/seaborn-data/grasp/iris.csv"
local_file = "iris.csv"
urllib.request.urlretrieve(url, local_file)

# Learn with PyArrow
desk = csv.read_csv(local_file)

# Filter rows
filtered = desk.filter(laptop.larger(desk('sepal_length'), 5.0))

print(filtered.slice(0, 5))

Ausgabe:


pyarrow.Desk
sepal_length: double
sepal_width: double
petal_length: double
petal_width: double
species: string
----
sepal_length: ((5.1,5.4,5.4,5.8,5.7))
sepal_width: ((3.5,3.9,3.7,4,4.4))
petal_length: ((1.4,1.7,1.5,1.2,1.5))
petal_width: ((0.2,0.4,0.2,0.2,0.4))
species: (("setosa","setosa","setosa","setosa","setosa"))

PyArrow liest die CSV-Datei und konvertiert sie in ein Spaltenformat. Identify und Typ jeder Spalte werden in einem übersichtlichen Schema aufgeführt. Dieses Setup ermöglicht eine schnelle Überprüfung und Filterung großer Datensätze.

# 4. Modin

Modin ist für alle gedacht, die eine schnellere Leistung wünschen, ohne eine neue Bibliothek zu erlernen. Es verwendet dieselbe Pandas-API, führt jedoch Vorgänge parallel aus. Sie müssen Ihren vorhandenen Code nicht ändern; Aktualisieren Sie einfach den Import. Alles andere funktioniert wie normale Pandas. Installieren Sie es mit pip:

Zum besseren Verständnis versuchen wir ein kleines Beispiel mit demselben Titanic-Datensatz wie folgt:

import modin.pandas as pd
url = "https://uncooked.githubusercontent.com/mwaskom/seaborn-data/grasp/titanic.csv"

# Load the dataset
df = pd.read_csv(url)

# Filter the dataset 
adults = df(df("age") > 18)

# Choose just a few columns to show
adults_small = adults(("survived", "intercourse", "age", "class"))

# Show end result
adults_small.head()

Ausgabe:


   survived     intercourse   age   class
0         0    male  22.0   Third
1         1  feminine  38.0   First
2         1  feminine  26.0   Third
3         1  feminine  35.0   First
4         0    male  35.0   Third

Modin verteilt die Arbeit auf die CPU-Kerne, was bedeutet, dass Sie eine bessere Leistung erzielen, ohne zusätzliche Maßnahmen ergreifen zu müssen.

# 5. Dask

Wie gehen Sie mit großen Datenmengen um, ohne den Arbeitsspeicher zu erhöhen? Dask ist eine gute Wahl, wenn Sie Dateien haben, die größer sind als der Arbeitsspeicher (RAM) Ihres Computer systems. Es verwendet eine verzögerte Auswertung, sodass nicht der gesamte Datensatz in den Speicher geladen wird. Dies hilft Ihnen, Millionen von Zeilen reibungslos zu verarbeiten. Installieren Sie es mit:

pip set up dask(full)

Um es auszuprobieren, können wir den Chicago Crime-Datensatz wie folgt verwenden:

import dask.dataframe as dd
import urllib.request

url = "https://knowledge.cityofchicago.org/api/views/ijzp-q8t2/rows.csv?accessType=DOWNLOAD"
local_file = "chicago_crime.csv"
urllib.request.urlretrieve(url, local_file)

# Learn CSV with Dask (lazy analysis)
df = dd.read_csv(local_file, dtype=str)  # all columns as string

# Filter crimes categorized as 'THEFT'
thefts = df(df('Major Kind') == 'THEFT')

# Choose a number of related columns
thefts_small = thefts(("ID", "Date", "Major Kind", "Description", "District"))

print(thefts_small.head())

Ausgabe:


          ID                   Date Major Kind       Description District            
5   13204489 09/06/2023 11:00:00 AM        THEFT         OVER $500      001
50  13179181 08/17/2023 03:15:00 PM        THEFT      RETAIL THEFT      014
51  13179344 08/17/2023 07:25:00 PM        THEFT      RETAIL THEFT      014
53  13181885 08/20/2023 06:00:00 AM        THEFT    $500 AND UNDER      025
56  13184491 08/22/2023 11:44:00 AM        THEFT      RETAIL THEFT      014

Filtern (Major Kind == 'THEFT') und das Auswählen von Spalten sind Lazy-Operationen. Die Filterung erfolgt sofort, da Dask Daten in Blöcken verarbeitet, anstatt alles auf einmal zu laden.

# Abschluss

Wir haben fünf Alternativen zu Pandas und deren Verwendung behandelt. Der Artikel hält die Dinge einfach und fokussiert. Ausführliche Informationen finden Sie in der offiziellen Dokumentation jeder Bibliothek:

Wenn Sie auf Probleme stoßen, hinterlassen Sie einen Kommentar und ich helfe Ihnen.

Kanwal Mehreen ist ein Ingenieur für maschinelles Lernen und ein technischer Redakteur mit einer großen Leidenschaft für Datenwissenschaft und die Schnittstelle zwischen KI und Medizin. Sie ist Mitautorin des E-Books „Maximizing Productiveness with ChatGPT“. Als Google Era Scholar 2022 für APAC setzt sie sich für Vielfalt und akademische Exzellenz ein. Sie ist außerdem als Teradata Range in Tech Scholar, Mitacs Globalink Analysis Scholar und Harvard WeCode Scholar anerkannt. Kanwal ist ein leidenschaftlicher Verfechter von Veränderungen und hat FEMCodes gegründet, um Frauen in MINT-Bereichen zu stärken.

Von admin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert