Spec-Zone.ru › pandas 0.24

Внутреннее устройство

В этом разделе представлен взгляд на внутреннее устройство pandas. Он предназначен в первую очередь для разработчиков самого pandas.

Индексирование

В pandas реализованы несколько объектов, которые могут служить допустимыми контейнерами для меток осей:

  • Index: общий объект «упорядоченного множества», массив ndarray типа object, не делающий никаких предположений о его содержимом. Метки должны быть хэшируемыми (и, скорее всего, неизменяемыми) и уникальными. Заполняет словарь меток и их позиций в Cython для выполнения O(1) поисков.
  • Int64Index: версия Index, высокооптимизированная для данных целых чисел 64 бит, таких как временные метки
  • Float64Index: версия Index, высокооптимизированная для данных чисел с плавающей запятой 64 бит
  • MultiIndex: стандартный объект иерархического индекса
  • DatetimeIndex: Объект Index с Timestamp упакованными элементами (реализация — значения int64)
  • TimedeltaIndex: Объект Index с Timedelta упакованными элементами (реализация — значения int64)
  • PeriodIndex: Объект Index с элементами Period

Существуют функции, которые упрощают создание обычного индекса:

  • date_range: диапазон дат с фиксированной частотой, сгенерированный по временным правилам или смещениям дат. Массив ndarray объектов Python datetime
  • period_range: диапазон дат с фиксированной частотой, сгенерированный по временным правилам или смещениям дат. Массив ndarray объектов Period, представляющих временные интервалы

Мотивация наличия класса Index в первую очередь заключалась в возможности разных реализаций индексирования. Это означает, что вы, пользователь, можете реализовать подкласс пользовательского Index, который может быть более подходящим для конкретного приложения, чем те, которые предоставляются в pandas.

С точки зрения внутренней реализации, соответствующие методы, которые должен определить Index, — это один или несколько из следующих (в зависимости от того, насколько несовместимы внутренние механизмы нового объекта с Index функциями):

  • get_loc: возвращает «индексатор» (целое число или, в некоторых случаях, объект среза) для метки
  • slice_locs: возвращает «диапазон» для среза между двумя метками
  • get_indexer: Вычисляет вектор индексирования для переиндексирования/выравнивания данных. Подробнее см. исходный код/строки документации
  • get_indexer_non_unique: Вычисляет вектор индексирования для переиндексирования/выравнивания данных, когда индекс не уникален. Подробнее см. исходный код/строки документации
  • reindex: Выполняет предварительное преобразование входного индекса, затем вызывает get_indexer
  • union, intersection: вычисляет объединение или пересечение двух объектов Index
  • insert: Вставляет новую метку в Index, возвращая новый объект
  • delete: Удаляет метку, возвращая новый объект
  • drop: Удаляет набор меток
  • take: Аналогично ndarray.take

Многоуровневый индекс

Внутренне, MultiIndex состоит из нескольких вещей: уровни, целочисленные коды (до версии 0.24 именовались метками) и имена уровней:

In [1]: index = pd.MultiIndex.from_product([range(3), ['one', 'two']],
   ...:                                    names=['first', 'second'])
   ...: 

In [2]: index
Out[2]: 
MultiIndex(levels=[[0, 1, 2], ['one', 'two']],
           codes=[[0, 0, 1, 1, 2, 2], [0, 1, 0, 1, 0, 1]],
           names=['first', 'second'])

In [3]: index.levels

© 2008–2012, AQR Capital Management, LLC, Lambda Foundry, Inc. and PyData Development Team
Licensed under the 3-clause BSD License.
https://pandas.pydata.org/pandas-docs/version/0.24.2/development/internals.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API