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)}")
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)}")
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.
Mobile version