

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.
