Warum filtert diese Polare so viel langsamer als mein Pandas-Äquivalent?Python

Python-Programme
Anonymous
 Warum filtert diese Polare so viel langsamer als mein Pandas-Äquivalent?

Post by Anonymous »

Ich versuche eine Funktion in Polaren und sie ist deutlich langsamer als mein Pandas-Äquivalent.
Meine Pandas-Funktion ist die folgende:

Code: Select all

import pandas as pd
import time
import numpy as np

target_value = 0.5
data = np.random.rand(1000,100)
df = pd.DataFrame(data)

run_times = []
for i in range(100):
st = time.perf_counter()
df_filtered = df.loc[(df[0] - target_value).abs() == (df[0] - target_value).abs().min()]
run_time = time.perf_counter() - st
run_times.append(run_time)
print(f"avg pandas run: {sum(run_times)/len(run_times)}")
und Polaren ist das Folgende

Code: Select all

import polars as pl
import time
import numpy as np

target_value = 0.5
data = np.random.rand(1000,100)
df = pl.DataFrame(data)

run_times = []
for i in range(100):
st = time.perf_counter()
df = df.with_columns(abs_diff = (pl.col('column_0')-target_value).abs())
df_filtered = df.filter(pl.col('abs_diff') == df['abs_diff'].min())
run_time = time.perf_counter() - st
run_times.append(run_time)
print(f"avg polars run: {sum(run_times)/len(run_times)}")
Meine echten Datensätze bestehen aus 1.000 bis 10.000 Zeilen und 100 Spalten, und ich muss viele verschiedene Datensätze filtern. Bei einem Beispiel der df-Form (1_000, 100) sehe ich, dass meine Pandas-Version um Größenordnungen schneller ist (0,0006 s für Pandas und 0,0037 s für Polaren), was unerwartet war. Gibt es eine effizientere Möglichkeit, meine Polarabfrage zu schreiben? Oder wird nur erwartet, dass Pandas mit kleineren Datensätzen dieser Größe eine bessere Leistung erbringen?
Eine Sache ist zu beachten: Wenn ich es mit zwei Spalten teste, ist Polars schneller, und je mehr Spalten ich hinzufüge, desto langsamer ist Polars. Andererseits beginnt Polars, Pandas nach etwa 500_000 Zeilen vs. 100 Spalten zu übertreffen.
Außerdem müsste ich in meinem tatsächlichen Anwendungsfall mehrere Zeilen zurückgeben, die dem nächstkommenden Wert entsprechen.
Ich bin mir nicht sicher, ob das wichtig ist, aber für zusätzlichen Kontext verwende ich Python auf einem Linux-Server.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post