Spec-Zone.ru › pandas 0.25

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

В этом разделе представлен обзор внутренней структуры 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: диапазон дат с фиксированной частотой, сгенерированный по правилу времени или смещению DateOffset. Массив ndarray объектов Python datetime
  • period_range: диапазон дат с фиксированной частотой, сгенерированный по правилу времени или смещению DateOffset. Массив 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([(0, 'one'),
            (0, 'two'),
            (1, 'one'),
            (1, 'two'),
            (2, 'one'),
            (2, 'two')],
           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.25.0/development/internals.html

Spec-Zone.ru

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