Вскрываем Pandas: DataFrame + ndarray | OTUS
⚡ Подписка на курсы OTUS!
Интенсивная прокачка навыков для IT-специалистов!
Подробнее

Курсы

Программирование
C++ Developer. Professional
-5%
Scala-разработчик
-8%
Backend-разработчик на PHP
-9%
Алгоритмы и структуры данных
-9%
Team Lead
-6%
Архитектура и шаблоны проектирования Golang Developer. Professional
-5%
HTML/CSS
-11%
C# ASP.NET Core разработчик
-5%
Kotlin Backend Developer
-8%
iOS Developer. Professional
-8%
Java Developer. Professional Web-разработчик на Python MS SQL Server Developer Android Developer. Basic Разработчик программных роботов (RPA) на базе UiPath и PIX Microservice Architecture Unity Game Developer. Basic Разработчик голосовых ассистентов и чат-ботов React.js Developer Node.js Developer Интенсив «Оптимизация в Java» Супер-практикум по использованию и настройке GIT Symfony Framework Java Developer. Basic Unity Game Developer. Professional Супер-интенсив Azure
Инфраструктура
Инфраструктурная платформа на основе Kubernetes
-6%
Экспресс-курс «IaC Ansible»
-10%
Administrator Linux.Basic
-10%
Мониторинг и логирование: Zabbix, Prometheus, ELK
-10%
Экспресс-курс «CI/CD или Непрерывная поставка с Docker и Kubernetes»
-30%
Administrator Linux. Professional
-6%
Экcпресс-курс «ELK»
-10%
Экспресс-курс по управлению миграциями (DBVC)
-10%
Базы данных Network engineer Cloud Solution Architecture Highload Architect Разработчик голосовых ассистентов и чат-ботов VOIP инженер Супер-практикум по работе с протоколом BGP Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Супер-интенсив "Tarantool"
Специализации Курсы в разработке Подготовительные курсы
+7 499 938-92-02

Вскрываем Pandas: DataFrame + ndarray

Python_Deep_15-5020-c517ff.10_site.png

Pandas сегодня является чуть ли не go-to инструментом для решения аналитических задач. Он предоставляет удобный и понятный широкому кругу исследователей интерфейс манипуляции массивами данных. Давай те же посмотрим, что «под капотом» этой библиотеки и за счёт чего происходит такая эффективная работа с данными?

Напомним, что Pandas – это библиотека Python, которая является мощным инструментом для анализа данных. Пакет даёт возможность строить сводные таблицы, выполнять группировки, предоставляет удобный доступ к табличным данным, а при наличии пакета matplotlib даёт возможность рисовать графики на полученных наборах данных.

Основные возможности библиотеки:

— Объект DataFrame для манипулирования индексированными массивами двумерных данных; — Инструменты для обмена данными между структурами в памяти и файлами различных форматов; — Встроенные средства совмещения данных и способы обработки отсутствующей информации; — Переформатирование наборов данных, в том числе создание сводных таблиц; — Срез данных по значениям индекса, расширенные возможности индексирования, выборка из больших наборов данных; — Вставка и удаление столбцов данных; — Возможности группировки позволяют выполнять трёхэтапные операции типа «разделение, изменение, объединение» (англ. split-apply-combine); — Слияние и объединение наборов данных; — Иерархическое индексирование позволяет работать с данными высокой размерности в структурах меньшей размерности; — Работа с временными рядами: формирование временных периодов и изменение интервалов и т. д.; — Ссылка на github.

Что же внутри?

df_blocks-5020-9ada54.png На самом деле, основная структура данных в PandasDataFrame — тесно завязана на использовании функционала NumPy и, в частности, типа ndarray.

Колонки из фрейма группируются по типу и хранятся вместе в виде ndarray’ев. Каждая такая группа называется Block’ом. Само собой, в ndarray нет никаких именованных осей и индексов, поэтому, чтобы транслировать обращения к фрейму в действия с реальными данными, существует BlockManager, через который проходят все запросы.

Такая архитектура сложилась исторически. Изначально данные хранились в обычных dict’ах, но, как видно, многое с тех пор изменилось. У такого подхода есть плюсы и минусы.

В плюсы можно записать использование функционала NumPy, который себя прекрасно зарекомендовал, а ndarray’и, как известно, хорошо оптимизированы и отлично подходят для манипуляций с числами.

С другой стороны, BlockManager создаёт overhead на любые операции доступа к данным, а из-за «кусочного» хранения любое добавление строк в DataFrame ведёт к копированию и расширению множества блоков.

Как следствие, в некоторых случаях для повышения производительности имеет смысл работать непосредственно с values фрейма и не добавлять строки во фрейм по одной, а сразу сливать большие фреймы.

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться