pandas.api.extensions.ExtensionArray.take#

ExtensionArray.take(индексы, *, allow_fill=False, fill_value=None)[источник]#

Извлечь элементы из массива.

Параметры:
индексыпоследовательность int или одномерный np.ndarray из int

Индексы для взятия.

allow_fillbool, по умолчанию False

Как обрабатывать отрицательные значения в индексы.

  • False: отрицательные значения в индексы указывают позиционные индексы справа (по умолчанию). Это похоже на numpy.take().

  • True: отрицательные значения в индексы указывать пропущенные значения. Эти значения установлены в fill_value. Любые другие отрицательные значения вызывают ValueError.

fill_valueany, optional

Значение заполнения для использования при NA-индексах, когда allow_fill истинно. Это может быть None, в этом случае значение NA по умолчанию для типа, self.dtype.na_value, используется.

Для многих ExtensionArrays будет два представления fill_value: пользовательский «упакованный» скаляр и низкоуровневое физическое значение NA. fill_value должна быть версией, ориентированной на пользователя, а реализация должна обрабатывать преобразование этого в физическую версию для обработки взятия, если это необходимо.

Возвращает:
ExtensionArray
Вызывает:
IndexError

Когда индексы выходят за границы массива.

ValueError

Когда индексы содержит отрицательные значения, кроме -1 и allow_fill равно True.

Смотрите также

numpy.take

Взять элементы из массива вдоль оси.

api.extensions.take

Извлечь элементы из массива.

Примечания

ExtensionArray.take вызывается Series.__getitem__, .loc, iloc, когда индексы является последовательностью значений. Кроме того, он вызывается Series.reindex(), или любой другой метод, вызывающий перевыравнивание, с fill_value.

Примеры

Вот пример реализации, который полагается на приведение массива расширения к типу данных object. Это использует вспомогательный метод pandas.api.extensions.take().

def take(self, indices, allow_fill=False, fill_value=None):
    from pandas.core.algorithms import take

    # If the ExtensionArray is backed by an ndarray, then
    # just pass that here instead of coercing to object.
    data = self.astype(object)

    if allow_fill and fill_value is None:
        fill_value = self.dtype.na_value

    # fill value should always be translated from the scalar
    # type for the array, to the physical storage type for
    # the data, before passing to take.

    result = take(data, indices, fill_value=fill_value,
                  allow_fill=allow_fill)
    return self._from_sequence(result, dtype=self.dtype)