Внутренние компоненты#

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

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

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

  • Index: общий объект «упорядоченного множества», ndarray типа object dtype без предположений о его содержимом. Метки должны быть хэшируемыми (и вероятно, неизменяемыми) и уникальными. Заполняет словарь метки в местоположение в Cython для выполнения O(1) поиски.

  • MultiIndex: стандартный объект иерархического индекса

  • DatetimeIndex: Объект Index с Timestamp элементы в рамке (impl — значения int64)

  • TimedeltaIndex: Объект Index с Timedelta элементы в коробках (реализация - значения int64)

  • PeriodIndex: Объект Index с элементами Period

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

  • date_range(): диапазон дат с фиксированной частотой, сгенерированный из правила времени или DateOffset. Массив ndarray объектов Python datetime

  • period_range(): диапазон дат с фиксированной частотой, сгенерированный из правила времени или DateOffset. ndarray из Period объекты, представляющие временные промежутки

Предупреждение

Пользовательский Index подклассы не поддерживаются, пользовательское поведение должно быть реализовано с использованием ExtensionArray интерфейс вместо этого.

MultiIndex#

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

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
Out[3]: FrozenList([[0, 1, 2], ['one', 'two']])

In [4]: index.codes
Out[4]: FrozenList([[0, 0, 1, 1, 2, 2], [0, 1, 0, 1, 0, 1]])

In [5]: index.names
Out[5]: FrozenList(['first', 'second'])

Можно догадаться, что коды определяют, какой уникальный элемент идентифицируется в этом месте на каждом уровне индекса. Важно отметить, что упорядоченность определяется исключительно из целочисленных кодов и не проверяет (и не заботится) о том, отсортированы ли сами уровни. К счастью, конструкторы from_tuples() и from_arrays() убедитесь, что это верно, но если вы вычисляете уровни и коды самостоятельно, будьте осторожны.

Значения#

pandas расширяет систему типов NumPy пользовательскими типами, такими как Categorical или дата-время с часовым поясом, поэтому у нас есть несколько понятий "значений". Для 1-D контейнеров (Index классы и Series) у нас есть следующее соглашение:

  • cls._values ссылается на 'наилучший возможный' массив. Это может быть ndarray или ExtensionArray.

Например, Series[category]._values является Categorical.

Наследование структур данных pandas#

Этот раздел был перемещен в Наследование структур данных pandas.