Все любят панд, но как насчет полярных?
Polars — это быстрая библиотека DataFrame, написанная на Rust с использованием модели памяти Apache Arrow. Он имеет привязки Python, которые предоставляют аналогичный API для pandas. Polars поддерживает как активный, так и ленивый режимы выполнения, что позволяет оптимизировать запросы и распараллеливать их. Polars использует maturin для компиляции кода Rust в модули Python.
Pandas и Polars — это библиотеки Python для анализа и обработки данных. У них есть некоторые сходства, но также и некоторые различия.
Некоторые из основных отличий:
- Внутреннее представление: Polars использует массивы Apache Arrow, а Pandas использует массивы NumPy. Массивы Apache Arrow более эффективны с точки зрения времени загрузки, использования памяти и вычислений.
- Режим оценки: Polars поддерживает как активную, так и ленивую оценку запросов, в то время как Pandas поддерживает только активную оценку. Ленивая оценка означает, что запросы не выполняются до тех пор, пока они не потребуются, что позволяет оптимизировать запросы.
- Параллельные операции: Polars поддерживает больше параллельных операций, чем Pandas, а это означает, что она может использовать несколько ядер ЦП для ускорения вычислений.
- Дизайн API: у Polars более выразительный и лаконичный API, чем у Pandas, что упрощает написание сложных запросов с меньшим количеством кода.
Плюсы и минусы HL
Панды:
- Плюсы: более зрелый и стабильный; Больше возможностей и функциональности; Дополнительная документация и поддержка сообщества
- Минусы: менее производительный; Более подробный; Без ленивой оценки
Поляры:
- Плюсы: более производительный; Более лаконичный; Ленивая оценка
- Минусы: Менее зрелый и стабильный; Меньше возможностей и функциональности; Меньше документации и поддержки сообщества
Надеюсь, это поможет вам понять разницу между библиотеками Pandas и Polars Python.
Теперь давайте проверим это сами
Согласно некоторым тестам, polars также быстрее и эффективнее используют память, чем pandas, при чтении и фильтрации больших фреймов данных. Однако это может зависеть от различных факторов, таких как тип данных, формат файла, конфигурация оборудования и т. д.
Чтобы продемонстрировать, вот некоторый код, который показывает разницу в скорости между полярами и пандами.
Этот код Python использует модуль csv для создания файла CSV с 1 миллионом строк и 10 столбцами. Затем он использует модуль random для генерации случайных чисел для каждой ячейки в CSV. Вы можете изменить этот код, чтобы генерировать различные типы данных, если это необходимо. Полученный файл CSV будет сохранен в том же каталоге, что и скрипт Python.
Затем простой пример чтения этого CSV-файла и его фильтрации на основе условия с использованием обеих библиотек. Я также буду использовать модуль `timeit` для измерения времени выполнения каждой операции.
# Import libraries import pandas as pd import polars as pl import timeit import csv import random # Define the number of rows and columns in the CSV file num_rows = 1000000 num_cols = 10 # Define the header row for the CSV file header = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'] # Generate random data for the CSV file data = [] for i in range(num_rows): row = [random.randint(1, 100) for j in range(num_cols)] data.append(row) # Write the data to a CSV file with open('data.csv', 'w', newline='') as f: writer = csv.writer(f) writer.writerow(header) writer.writerows(data) # Define file name file_name = "data.csv" # Define number of repetitions for timeit reps = 10 # Define filter condition condition = lambda df: df["a"] > 10 # Define functions for reading and filtering dataframes using polars and pandas def read_polars(): return pl.read_csv(file_name) def read_pandas(): return pd.read_csv(file_name) def filter_polars(df): return df.filter(pl.col("a") > 10) def filter_pandas(df): return df[df["a"] > 10] # Read dataframes using polars and pandas df_polars = read_polars() df_pandas = read_pandas() # Measure execution time for reading dataframes using polars and pandas read_time_polars = timeit.timeit("read_polars()", globals=globals(), number=reps) / reps read_time_pandas = timeit.timeit("read_pandas()", globals=globals(), number=reps) / reps # Measure execution time for filtering dataframes using polars and pandas filter_time_polars = timeit.timeit("filter_polars(df_polars)", globals=globals(), number=reps) / reps filter_time_pandas = timeit.timeit("filter_pandas(df_pandas)", globals=globals(), number=reps) / reps # Print execution times for reading and filtering dataframes using polars and pandas print(f"Read time (polars): {read_time_polars:.4f} seconds") print(f"Read time (pandas): {read_time_pandas:.4f} seconds") print(f"Filter time (polars): {filter_time_polars:.4f} seconds") print(f"Filter time (pandas): {filter_time_pandas:.4f} seconds")
Вывод этого кода может варьироваться в зависимости от конфигурации вашего оборудования, но вот пример того, что я получил:
Как видите, polars намного быстрее, чем pandas, как при чтении, так и при фильтрации фреймов данных. Согласно некоторым тестам, это связано с тем, что polars использует мощные функции параллелизма Rust и формат стрелочной памяти для выполнения параллельных операций с большими наборами данных.
Надеюсь, вы найдете это полезным 👍
🤖 Подпишитесь на меня, чтобы быть в курсе предстоящих публикаций о науке о данных, машинном обучении и искусственном интеллекте.
#Python #Data #Pandas #Polars #MachineLearning #AI #ML #DeepLearning #DataScience #YYT
Ресурсы:
1. Начало работы с библиотекой Polars DataFrame. https://towardsdatascience.com/getting-started-with-the-polars-dataframe-library-6f9e1c014c5c
2. Polars vs Pandas — 4 ключевых концептуальных отличия. https://medium.com/@datasciencedisciple/polars-vs-pandas-4-key-concept-differences-3c09713c0fe8
3. Polars, замена Pandas? https://www.linkedin.com/pulse/polars-pandas-replacement-sam-anderson
4. Полярная документация. https://pola-rs.github.io/polars-book/
5. Polars — Молниеносная библиотека DataFrame для Rust и Python. https://www.pola.rs/
6. Является ли Pypolars новой альтернативой Pandas? — Аналитика Видья. https://www.analyticsvidhya.com/blog/2021/02/is-pypolars-the-new-alternative-to-pandas/
7. Знакомство с полярами — Medium. https://r-brink.medium.com/introduction-to-polars-ee9e638dc163
8. Работа с большими наборами данных стала быстрой и простой: библиотека Polars. https://hackernoon.com/crunching-large-datasets-made-fast-and-easy-the-polars-library
9. Быстрое применение функции к Polars Dataframe — Stack Overflow на русском. https://stackoverflow.com/questions/72563617/fast-apply-of-a-function-to-polars-dataframe
10. Pandas vs Polars — Сравнение скорости — Stuff by Yuki. https://stuffbyyuki.com/pandas-vs-polars-speed-comparison
11. Pandas vs Polar — Взгляд на производительность — Studio Terabyte. https://studioterabyte.nl/en/blog/polars-vs-pandas
12. Polars против Pandas: разница в размере и скорости https://stackoverflow.com/questions/75530375/polars-vs-pandas-size-and-speed-difference