Сообщение:
- даже при использовании 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 в файл паркета.
Можете ли вы посоветовать мне, как уменьшить использование памяти для полярный 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
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
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
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
Мобильная версия