Почему эти поляры фильтруют намного медленнее, чем мой эквивалент панд?Python

Программы на Python
Ответить
Anonymous
 Почему эти поляры фильтруют намного медленнее, чем мой эквивалент панд?

Сообщение Anonymous »

Я пробую функцию в полярах, и она значительно медленнее, чем мой эквивалент в пандах.
Моя функция в пандах следующая:

Код: Выделить всё

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)}")
и поляры следующие

Код: Выделить всё

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)}")
Мои реальные наборы данных содержат от 1000 до 10 000 строк и 100 столбцов, и мне нужно фильтровать множество различных наборов данных. В одном примере формы df (1_000, 100) я вижу, что моя версия панд работает на несколько единиц быстрее (0,0006 с для панд и 0,0037 с для поляр), что было неожиданно. Есть ли более эффективный способ написать мой полярный запрос? Или просто ожидается, что pandas превзойдет производительность с меньшими наборами данных такого размера?
Одна вещь, которую следует отметить: когда я тестирую его с двумя столбцами, поляры работают быстрее, и чем больше столбцов я добавляю, тем медленнее работают поляры. С другой стороны, поляры начинают превосходить панды примерно после 500_000 строк по сравнению со 100 столбцами.
Кроме того, в моем реальном случае использования мне нужно будет вернуть несколько строк, соответствующих ближайшему значению.
Не уверен, важно ли это, но для дополнительного контекста я запускаю Python на сервере Linux.

Подробнее здесь: https://stackoverflow.com/questions/794 ... equivalent
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»