Site Overlay

Pandas и неудачное применение методов

Как разложить словарь подобного вида в датасет Пандас, чтобы в Юпитере было как можно меньше кода?

А на выходе получить примерно следующее:

На самом деле, вариантов несколько. Расскажу о том, что лежит на поверхности, и что точно не следует применять — контакенацию.

С контакенацией можно решить задачу с алгоритмом в один открытый цикл — проходимся по каждому из айдишников, преобразуем вложенный словарь в микродатафрейм, контакенируем, с первом случае, с пустой таблицей, в остальных — с собираемым датасетом.

Преимущество этого решения — краткость. Весь процесс описывается, условно, в четырех строках кода и не нужно о заголовках — потерь не будет — все сохранится. Минус — колоссальная потеря в скорости, что заметно, если собираемых строк несколько сотен тысяч, или миллионов.

Альтернативный, и на мой взгляд, наиболее правильный вариант — раскладка данных в лист, как в общем и желательно делать.

Кода чуть больше, появляется зависимость в заголовках и несравнимая разница в скорости. Условно, 500 000 строк мощный сервер будет контакенировать несколько часов, тогда как данный метод на том же железе производит вычисления менее чем за секунду.

Собственно, вывод. Не все простые решения одинаково полезны, а в случае с Пандас, не лучших решение даже более чем достаточно. И если контакенация первоначально не предназначена для подобных задач, то, например, медленная работа таких вещей, как функции в Пандас, подводит к мысли, что библиотеку чаще лучше применять для итоговых «причесываний» датасетов, а корректировки вносить на уровне применения вычислений в словарях и листах, или в рамках преобразований в NumPy.

Пандас — мощный инструмент, но перед его применением в той, или иной задаче стоит задать себе вопрос — есть ли более скоростные альтернативы.