Pandas, Polars і Dask – наживо на графіках
Три бібліотеки для роботи з датафреймами в Python і три живі графіки Chart.js: бульбашкова діаграма для екосистеми, «сценарна» бульбашкова діаграма, де колір береться зі значення, а не з бібліотеки, і лінійний графік із прогресивною анімацією для динаміки популярності. Без скріншотів – canvas вище малює браузер.
Мені хотілося однієї сторінки, яка справді показує різницю між pandas, Polars і Dask, а не просто каже, що Polars «швидкий». Три графіки вище – це Chart.js, який рендериться у вашому браузері на фіксованому наборі даних, підібраному вручну, а не типовий шаблон із заглушками. Статистика екосистеми – бульбашкова діаграма. Бенчмарк – «сценарна» бульбашкова діаграма, де колір обчислюється зі значення, а не закріплений за бібліотекою. Крива популярності домальовується прогресивно, зліва направо – так само, як реальне зростання розгорталося рік за роком.
Три бібліотеки, одна задача – табличні дані в Python – і три дуже різні компроміси між пропускною здатністю, пам'яттю та тим, скільки з наявного pandas-коду переживе перехід. Цифри нижче округлені, станом на вересень 2026, а бенчмарк ілюстративний, а не прогін, який я відтворила саме на цій сторінці. Краще повторити це зайвий раз, ніж дозволити графіку натякати на точність, якої в нього немає.
1. Чому бульбашки поділили лише три бібліотеки
Бульбашкові й точкові діаграми – єдиний тип, де будь-яка позначка може опинитися поруч із будь-якою іншою, тож категоріальна палітра має витримати кожну можливу пару кольорів, а не лише сусідів у легенді. Прогнавши таку перевірку «всі пари» на моєму звичному наборі з восьми відтінків, її проходять лише перші три кольори – і у світлій, і в темній темі – для людини з дальтонізмом. Це не питання смаку, а справжня причина, чому графік екосистеми вище порівнює саме pandas, Polars і Dask, а не п'ять бібліотек у п'яти каламутних кольорах. PySpark і Modin отримали абзац ближче до кінця сторінки замість бульбашки.
pandas усе ще випереджає за завантаженнями на порядок – саме цього й слід очікувати від 15-річного стандарту з тисячами інтеграцій. Цікавіше інше: наскільки близько Polars підібрався до Dask за зірками на GitHub, маючи приблизно вдесятеро менше контриб'юторів – невелика сфокусована команда, яка переписала рушій з нуля замість розширення наявного API, здатна випереджати набагато більшу.
2. Сценарний колір, не колір-ідентичність
Графік продуктивності запускає groupby-агрегацію на CSV у двох розмірах – 2 ГБ, який комфортно вміщується в пам'ять, і 20 ГБ, який уже на межі типового ноутбука. Chart.js дозволяє задавати elements.point.radius і backgroundColor як функції замість фіксованих значень – саме це демонструє офіційний приклад scriptable options. Тут я застосувала це не заради ефекту: колір обчислюється прямо з часу виконання в секундах – швидко, помірно, повільно – а не закріплений за бібліотекою, тож той самий зелений може належати і Polars на 2 ГБ, і Dask на 20 ГБ. Розмір бульбашки береться з пікового RAM за квадратним коренем, щоб площа, а не сирий радіус, приблизно лінійно відповідала пам'яті.
На 2 ГБ Dask програє навіть звичайному pandas – побудова графа задач має накладні витрати, які окупаються лише коли роботи достатньо, щоб розподілити її. На 20 ГБ картина перевертається: однопотоковий pandas, копіюючи дані в пам'яті, деградує найсильніше; Polars на Rust з SIMD і потоковим виконанням лишається в «помірній» зоні; Dask, розбиваючи файл на частини, тримає пам'ять під контролем і майже наздоганяє Polars за часом.
3. Прогресивні лінії і що б я насправді обрала
Графік зростання відстежує орієнтовні тижневі завантаження PyPI з 2019 по 2026 рік для тих самих трьох бібліотек і анімується так само, як приклад progressive-line у Chart.js: кожна точка отримує власну затримку залежно від індексу, тож лінія домальовується зліва направо, а не просто проявляється. Це навмисне відлуння теми, а не декор – реальне зростання теж розгорталося рік за роком. pandas виходить на плато – так виглядає зрілий 15-річний стандарт, а не бібліотека, що втрачає позиції. Polars, випущений у 2020-му, демонструє класичну криву запізнілого старту: спочатку майже непомітний, потім різкий вигин, коли про швидкість почали писати за межами вузького кола ентузіастів Rust.
Тож що б я насправді обрала? pandas – коли екосистема й «м'язова пам'ять» команди важать більше за сирі секунди. Polars – для нового пайплайна на одній потужній машині, де пам'ять і CPU коштують реальних грошей. Dask – коли дані взагалі перестають вміщуватися на одну машину, а pandas-подібний код хочеться зберегти, а не переписувати на PySpark. PySpark і Modin стоять ще на крок далі: PySpark – коли ви вже впевнено в території кластерів або Spark уже є вашою інфраструктурою, Modin – коли чесна мета це паралельне пришвидшення через зміну одного рядка імпорту і нульове бажання щось переписувати.
- pandas – дані до кількох ГБ, максимум екосистеми, команда, що вже знає API напам'ять.
- Polars – одна потужна машина, новий пайплайн без legacy-коду, пам'ять і CPU, які справді коштують грошей.
- Dask – дані, які вже не вміщуються на одну машину, pandas-подібний API, від якого не хочеться відмовлятися, кластер, що вже є або планується.
- PySpark або Modin – ще на крок далі: PySpark, коли ви вже впевнено в кластерній території, Modin – коли треба паралельне пришвидшення через зміну одного рядка імпорту, а переписування не варіант.
Про цифри
Зірки на GitHub і тижневі завантаження PyPI – округлені оцінки станом на вересень 2026, взяті з публічних трекерів на кшталт pepy.tech і репозиторіїв самих проєктів. Цифри бенчмарку відтворюють типову форму публічних порівнянь groupby, а не прогін, який я виконала саме для цієї сторінки – реальні секунди залежать від заліза, версій і форми ваших даних. Усі три графіки побудовані на Chart.js: бульбашкова діаграма, «сценарна» бульбашкова діаграма і лінійний графік із прогресивною анімацією – ті самі три патерни прикладів, що йдуть у власній документації Chart.js.
Готові обговорити проєкт?
Я senior веброзробниця, спеціалізуюсь на React і Next.js - відкрита до фриланс-проєктів по всьому світу.
Місто
Київ, Україна
Upwork
Переглянути профільTelegram
Напишіть меніViber
Напишіть мені