Использование поляров действительно быстрее, чем pandas 2, НО НЕ паркетный файл, и в любом случае использование памяти тPython

Программы на Python
Ответить
Anonymous
 Использование поляров действительно быстрее, чем pandas 2, НО НЕ паркетный файл, и в любом случае использование памяти т

Сообщение Anonymous »

Я подумываю о переходе от панд к полярам. поэтому я делаю некоторое сравнение для моего большого чтения CSV. Размер файла csv составляет около 600 МБ.
Сообщение:
  • даже при использовании pandas 2 использование pandas 2 без pyarrow (просто используйте обычный бэкэнд numpy) работает быстрее, чем pandas 2 с pyarrow, что для меня неожиданно. Я думал, что панды 2 работают быстрее после использования Pyarrow. Оказывается, это еще медленнее. Это разочаровывает! Polars действительно намного быстрее (в 3 раза).
  • Однако использование памяти Polars такое же, как у pandas 2, которое составляет 753 МБ.
  • если я сохраню файл csv в файл паркета с помощью pyarrow engine. Pandas 2 имеет ту же скорость, что и Polars, или pandas даже немного быстрее, что тоже очень интересно, что заставляет меня чувствовать себя лучше, если я останусь с Pandas, но просто сохраню файл csv в файл паркета.
Я использую Dash для разработки информационной панели с большим количеством графиков тепловой карты для большого набора дат, поэтому использование меньшего количества памяти имеет для меня решающее значение.
Можете ли вы посоветовать мне, как уменьшить использование памяти для полярный read_csv().
Вот скриншот моего кода.
Сначала read_csv с использованием pandas 2 с pyarrow
timer_start=timeit.default_timer()
df_pyarrow=pd.read_csv('input\\'+filename,parse_dates=True,sep='\t',engine='pyarrow')
timer_end=timeit.default_timer()

timer_minutes=(timer_end-timer_start)/60
timer_seconds=(timer_end-timer_start)

print(f'Time took to Finish reading file is {timer_seconds:.1f} seconds')
print(f'Time took to Finish reading file is {timer_minutes:.2f} minutes')

Time took to Finish reading file is 206.8 seconds
Time took to Finish reading file is 3.45 minutes

df_pyarrow.info()


RangeIndex: 3675 entries, 0 to 3674
Columns: 26903 entries, Depth to 2023-03-09 00:06:28
dtypes: float64(26903)
memory usage: 754.3 MB

  • использование Pandas 2 без pyarrow
timer_start=timeit.default_timer()
df_dts2=pd.read_csv('input\\'+filename,parse_dates=True,sep='\t')
timer_end=timeit.default_timer()

timer_minutes=(timer_end-timer_start)/60
timer_seconds=(timer_end-timer_start)

print(f'Time took to Finish reading file is {timer_seconds:.1f} seconds')
print(f'Time took to Finish reading file is {timer_minutes:.2f} minutes')

Time took to Finish reading file is 121.2 seconds
Time took to Finish reading file is 2.02 minutes

df_dts2.info()

RangeIndex: 3675 entries, 0 to 3674
Columns: 26903 entries, Depth to 2023-03-09 00:06:28
dtypes: float64(26903)
memory usage: 754.3 MB
  • с использованием Polars
import polars as pl
timer_start=timeit.default_timer()
df_dts2=pl.read_csv('input\\'+filename,separator='\t')
timer_end=timeit.default_timer()

timer_minutes=(timer_end-timer_start)/60
timer_seconds=(timer_end-timer_start)

print(f'Time took to Finish reading file is {timer_seconds:.1f} seconds')
print(f'Time took to Finish reading file is {timer_minutes:.2f} minutes')

Time took to Finish reading file is 37.7 seconds
Time took to Finish reading file is 0.63 minutes

df_dts2.estimated_size("mb")
763.4694671630859
  • с использованием файла Parquet
Пример: использование Pandas 2
timer_start=timeit.default_timer()
df_parquet_pyarrow=pd.read_parquet('input\\'+filename_parquet_pyarrow, engine='pyarrow')
timer_end=timeit.default_timer()
timer_minutes=(timer_end-timer_start)/60
timer_seconds=(timer_end-timer_start)

print(f'Time took to Finish reading file is {timer_seconds:.1f} seconds')
print(f'Time took to Finish reading file is {timer_minutes:.2f} minutes')

Time took to Finish reading file is 13.0 seconds
Time took to Finish reading file is 0.22 minutes


Пример: использование Polars
import polars as pl
timer_start=timeit.default_timer()
df_polar_parquet=pl.read_parquet('input\\'+filename_parquet_pyarrow)
timer_end=timeit.default_timer()

timer_minutes=(timer_end-timer_start)/60
timer_seconds=(timer_end-timer_start)

print(f'Time took to Finish reading file is {timer_seconds:.1f} seconds')
print(f'Time took to Finish reading file is {timer_minutes:.2f} minutes')

Time took to Finish reading file is 15.7 seconds
Time took to Finish reading file is 0.26 minutes


Подробнее здесь: https://stackoverflow.com/questions/771 ... ither-case
Ответить

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

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

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

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

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