pandas.DataFrame.reindex#

DataFrame.reindex(метки=None, *, index=None, столбцы=None, ось=None, метод=None, copy=None, уровень=None, fill_value=nan, limit=None, допуск=None)[источник]#

Привести DataFrame к новому индексу с опциональной логикой заполнения.

Размещает NA/NaN в позициях, где нет значения в предыдущем индексе. Создается новый объект, если новый индекс не эквивалентен текущему и copy=False.

Параметры:
меткиподобный массиву, необязательный

Новые метки / индекс для приведения оси, указанной параметром 'axis'.

indexподобный массиву, необязательный

Новые метки для индекса. Предпочтительно объект Index, чтобы избежать дублирования данных.

столбцыподобный массиву, необязательный

Новые метки для столбцов. Предпочтительно объект Index, чтобы избежать дублирования данных.

осьint или str, необязательно

Ось для цели. Может быть либо именем оси (‘index’, ‘columns’), либо номером (0, 1).

метод{None, ‘backfill’/’bfill’, ‘pad’/’ffill’, ‘nearest’}

Метод для заполнения пропусков в переиндексированном DataFrame. Обратите внимание: это применимо только к DataFrame/Series с монотонно возрастающим/убывающим индексом.

  • None (по умолчанию): не заполнять пропуски

  • pad / ffill: Распространение последнего допустимого наблюдения вперед до следующего допустимого.

  • backfill / bfill: Использовать следующее допустимое наблюдение для заполнения пропуска.

  • nearest: Использовать ближайшие допустимые наблюдения для заполнения пропуска.

copybool, по умолчанию True

Возвращает новый объект, даже если переданные индексы одинаковы.

Примечание

The copy ключевое слово изменит поведение в pandas 3.0. Копирование при записи будет включено по умолчанию, что означает, что все методы с copy ключевое слово будет использовать механизм ленивого копирования для отложенного копирования и игнорирования copy ключевое слово. The copy ключевое слово будет удалено в будущей версии pandas.

Вы уже можете получить будущее поведение и улучшения, включив copy on write pd.options.mode.copy_on_write = True

уровеньint или имя

Трансляция по уровню, сопоставляя значения Index на переданном уровне MultiIndex.

fill_valueскаляр, по умолчанию np.nan

Значение для использования в качестве пропущенных значений. По умолчанию NaN, но может быть любым «совместимым» значением.

limitint, по умолчанию None

Максимальное количество последовательных элементов для заполнения вперед или назад.

допускнеобязательный

Максимальное расстояние между исходными и новыми метками для неточных совпадений. Значения индекса в соответствующих местах наиболее удовлетворяют уравнению abs(index[indexer] - target) <= tolerance.

Допуск может быть скалярным значением, которое применяет одинаковый допуск ко всем значениям, или list-like, которое применяет переменный допуск на элемент. List-like включает list, tuple, array, Series и должен быть того же размера, что и индекс, а его dtype должен точно соответствовать типу индекса.

Возвращает:
DataFrame с изменённым индексом.

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

DataFrame.set_index

Установить метки строк.

DataFrame.reset_index

Удалить метки строк или переместить их в новые столбцы.

DataFrame.reindex_like

Изменить на те же индексы, что и у другого DataFrame.

Примеры

DataFrame.reindex поддерживает два соглашения вызова

  • (index=index_labels, columns=column_labels, ...)

  • (labels, axis={'index', 'columns'}, ...)

Мы высоко рекомендуется использовать ключевые аргументы для уточнения вашего намерения.

Создайте dataframe с некоторыми вымышленными данными.

>>> index = ['Firefox', 'Chrome', 'Safari', 'IE10', 'Konqueror']
>>> df = pd.DataFrame({'http_status': [200, 200, 404, 404, 301],
...                   'response_time': [0.04, 0.02, 0.07, 0.08, 1.0]},
...                   index=index)
>>> df
           http_status  response_time
Firefox            200           0.04
Chrome             200           0.02
Safari             404           0.07
IE10               404           0.08
Konqueror          301           1.00

Создайте новый индекс и переиндексируйте фрейм данных. По умолчанию значения в новом индексе, которые не имеют соответствующих записей во фрейме данных, присваиваются NaN.

>>> new_index = ['Safari', 'Iceweasel', 'Comodo Dragon', 'IE10',
...              'Chrome']
>>> df.reindex(new_index)
               http_status  response_time
Safari               404.0           0.07
Iceweasel              NaN            NaN
Comodo Dragon          NaN            NaN
IE10                 404.0           0.08
Chrome               200.0           0.02

Мы можем заполнить пропущенные значения, передав значение ключевому слову fill_value. Поскольку индекс не является монотонно возрастающим или убывающим, мы не можем использовать аргументы для ключевого слова method для заполнения NaN значения.

>>> df.reindex(new_index, fill_value=0)
               http_status  response_time
Safari                 404           0.07
Iceweasel                0           0.00
Comodo Dragon            0           0.00
IE10                   404           0.08
Chrome                 200           0.02
>>> df.reindex(new_index, fill_value='missing')
              http_status response_time
Safari                404          0.07
Iceweasel         missing       missing
Comodo Dragon     missing       missing
IE10                  404          0.08
Chrome                200          0.02

Мы также можем переиндексировать столбцы.

>>> df.reindex(columns=['http_status', 'user_agent'])
           http_status  user_agent
Firefox            200         NaN
Chrome             200         NaN
Safari             404         NaN
IE10               404         NaN
Konqueror          301         NaN

Или мы можем использовать аргументы ключевых слов в стиле "axis"

>>> df.reindex(['http_status', 'user_agent'], axis="columns")
           http_status  user_agent
Firefox            200         NaN
Chrome             200         NaN
Safari             404         NaN
IE10               404         NaN
Konqueror          301         NaN

Для дальнейшей иллюстрации функциональности заполнения в reindex, мы создадим DataFrame с монотонно возрастающим индексом (например, последовательность дат).

>>> date_index = pd.date_range('1/1/2010', periods=6, freq='D')
>>> df2 = pd.DataFrame({"prices": [100, 101, np.nan, 100, 89, 88]},
...                    index=date_index)
>>> df2
            prices
2010-01-01   100.0
2010-01-02   101.0
2010-01-03     NaN
2010-01-04   100.0
2010-01-05    89.0
2010-01-06    88.0

Предположим, мы решаем расширить фрейм данных, чтобы охватить более широкий диапазон дат.

>>> date_index2 = pd.date_range('12/29/2009', periods=10, freq='D')
>>> df2.reindex(date_index2)
            prices
2009-12-29     NaN
2009-12-30     NaN
2009-12-31     NaN
2010-01-01   100.0
2010-01-02   101.0
2010-01-03     NaN
2010-01-04   100.0
2010-01-05    89.0
2010-01-06    88.0
2010-01-07     NaN

Записи индекса, которые не имели значения в исходном фрейме данных (например, '2009-12-29'), по умолчанию заполняются NaN. При желании мы можем заполнить пропущенные значения, используя один из нескольких вариантов.

Например, чтобы распространить последнее допустимое значение назад для заполнения NaN значения, передайте bfill в качестве аргумента для method ключевое слово.

>>> df2.reindex(date_index2, method='bfill')
            prices
2009-12-29   100.0
2009-12-30   100.0
2009-12-31   100.0
2010-01-01   100.0
2010-01-02   101.0
2010-01-03     NaN
2010-01-04   100.0
2010-01-05    89.0
2010-01-06    88.0
2010-01-07     NaN

Обратите внимание, что NaN значение, присутствующее в исходном датафрейме (по индексу 2010-01-03), не будет заполнено ни одной из схем распространения значений. Это происходит потому, что заполнение при переиндексации не смотрит на значения датафрейма, а только сравнивает исходные и желаемые индексы. Если вы хотите заполнить NaN значения, присутствующие в исходном DataFrame, используйте fillna() метод.

См. руководство пользователя подробнее.