Если я использую python pandas, есть ли необходимость в структурированных массивах?

Теперь, когда pandas предоставляет структуру фрейма данных, нужна ли необходимость в структурированных/записываемых массивах в numpy? Есть некоторые изменения, которые мне нужно сделать для существующего кода, который требует этой структуры структурированного массива, но я рассматриваю возможность использования pandas вместо этого с этого момента. Смогу ли я в любой момент найти, что мне нужна некоторая функциональность структурированных/записываемых массивов, которые pandas не предоставляет?

Ответы

Ответ 1

pandas DataFrame - это инструмент высокого уровня, в то время как структурированные массивы - инструмент очень низкого уровня, позволяющий интерпретировать двоичный блок данных как табличную структуру. В pandas трудно использовать вложенные типы данных с той же семантикой, что и структурированные массивы, хотя это можно подражать иерархической индексации (структурированные массивы не могут делать большинство вещей, которые вы можете делать с иерархической индексацией).

Структурированные массивы также пригодны для работы с массивными табличными наборами данных, загружаемыми через карты памяти (np.memmap). Это ограничение, которое будет исправлено в pandas в конце концов.

Ответ 2

Я сейчас в середине перехода к Pandas DataFrames из различных массивов Numpy. Это было относительно безболезненно, поскольку Pandas, AFAIK, если он построен в основном поверх Numpy. Я имею в виду, что .mean(), .sum() и т.д. Все работают так, как вы надеетесь. Кроме того, возможность добавления иерархического индекса и использования атрибута .ix[] (index) и метода .xs() (поперечного сечения) для вытаскивания фрагментов данных с помощью арбитража значительно улучшила читаемость и производительность моего кода (в основном за счет сокращения числа обращений в мою базу данных).

Одна вещь, которую я еще не полностью исследовал, - это Pandas совместимость с более продвинутыми функциями Scipy и Matplotlib. Однако в случае возникновения каких-либо проблем достаточно легко вытащить один столбец, который ведет себя достаточно, как массив для работы этих библиотек, или даже конвертировать в массив на лету. Методы построения DataFrame, например, полагаются на matplotlib и заботятся о любом преобразовании для вас.

Кроме того, если вы похожи на меня, и ваше основное использование Scipy - это модуль статистики, pystatsmodels быстро созревают и в значительной степени зависят от pandas.

Что мои две центы стоят

Ответ 3

Я не нашел времени, чтобы заглянуть в pandas, но я часто использую структурированный массив в numpy. Вот несколько соображений:

  • структурированные массивы так же удобны, как recarrays с меньшими накладными расходами, если вы не возражаете потерять возможность доступа к полям по атрибутам. Но тогда вы пытались использовать min или max в качестве имени поля в recarray?

  • NumPy был разработан в течение гораздо более длительного периода времени, чем pandas, с более крупным экипажем, и он становится достаточно распространенным, что многие сторонние пакеты полагаются на него. Вы можете ожидать, что структурированные массивы будут более переносимыми, чем pandas dataframes.

  • Являются ли pandas dataframes легко подбираемыми? Могут ли они быть отправлены туда и обратно с помощью PyTables, например?

Если вы не на 100% процентов, что вам никогда не придется делиться своим кодом с пользователями без pandas, вы можете захотеть сохранить некоторые структурированные массивы.