Если я использую 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
, вы можете захотеть сохранить некоторые структурированные массивы.