Сброс индекса в Pandas: как сбросить индекс в Pandas

Добро пожаловать в этот учебник по сбросу индекса Pandas DataFrame. В этом посте вы узнаете, как использовать мощный метод .reset_index() Pandas для уточнения индекса вашего DataFrame, создания чистых структур данных для ваших аналитических и моделировочных задач и открытия более глубоких инсайтов из ваших данных.

Перезагрузка и работа с индексом в Pandas - это то, с чем я сталкиваюсь каждый день, работая с Pandas. Это руководство охватывает мои любимые способы сброса индекса – все они проверены и испытаны! Мы рассмотрим важные темы, такие как:

  • Как работает .reset_index() и когда его использовать

  • Как сбросить индекс и удалить исходный столбец

  • Как удалить индекс в многоиндексном DataFrame

  • Как сбросить индекс на месте

Будь вы новичок в Pandas или продвинутый пользователь, стремящийся улучшить свои навыки индексации, эта инструкция предоставит вам необходимые знания и опыт для легкого выполнения сложных операций с индексацией. Давайте погрузимся в изучение метода reset_index() библиотеки Pandas, который позволяет сбросить индекс вашего DataFrame.

Быстрый ответ: различные способы сброса индекса

# The Different Ways to Reset an Index
import pandas as pd
df = pd.DataFrame()

# Reset an index and keep it
df = df.reset_index()  

# Reset index and drop it
df = df.reset_index(drop=True)   

# Reset index in place
df.reset_index(inplace=True)

# Reset a Level of a Multi-Index DataFrame
df = df.reset_index(level=1)

Оглавление

Загрузка образца фрейма данных

Чтобы следовать этому руководству, я предоставил ниже пример Pandas DataFrame. Вы, конечно, можете использовать свой собственный набор данных, хотя ваши результаты могут отличаться. Я намеренно сделал набор данных максимально простым, чтобы вам было легче следовать за инструкциями.

# Load a sample pandas dataframe
import pandas as pd
df = pd.DataFrame(
    {'Name': ['Jane', 'Melissa', 'John', 'Matt'],
     'Age': [23, 45, 35, 64],
     'Birth City': ['Toronto', 'Atlanta', 'Toronto', 'Atlanta'],
     'Gender': ['F', 'F', 'M', 'M']}).set_index('Name')

# Returns:
#          Age Birth City Gender
# Name                          
# Jane      23    Toronto      F
# Melissa   45    Atlanta      F
# John      35    Toronto      M
# Matt      64    Atlanta      M

В приведенном выше блоке кода мы загрузили Python словарь в DataFrame. Затем мы применили метод .set_index() к DataFrame, чтобы получить более значимый индекс.

Как сбросить индекс DataFrame в Pandas

В этом разделе мы подробнее рассмотрим, как работает метод .reset_index() и когда его следует использовать в задачах анализа данных.

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

Давайте рассмотрим синтаксис метода:

# Understanding the Pandas reset_index() Method
DataFrame.reset_index(level=None, drop=False, inplace=False, col_level=0, col_fill='')

Давайте рассмотрим, что делают различные параметры:

Параметр
Описание
Значение по умолчанию

level=

Позволяет нам указать уровни многоиндексного DataFrame. По умолчанию он сбрасывает все уровни.

None

drop=

Позволяет нам указать, что исходный индекс должен быть удален (а не вставлен как новый столбец DataFrame).

False

inplace=

Следует ли изменять DataFrame вместо создания нового.

False

col_level=

Позволяет нам указать, на какой уровень должны быть вставлены метки столбцов, если они имеют несколько уровней.

0

col_fill=

Позволяет указать, если DataFrame имеет несколько уровней, чем должны быть заполнены другие уровни. Если передано None, имя индекса повторяется.

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

# How to reset a Pandas dataframe index
import pandas as pd
df = pd.DataFrame({'Name': ['Jane', 'Melissa', 'John', 'Matt'], 'Age': [23, 45, 35, 64],'Birth City': ['Toronto', 'Atlanta', 'Toronto', 'Atlanta'], 'Gender': ['F', 'F', 'M', 'M']}).set_index('Name')

print('The original dataframe:')
print(df)

reset_index_df = df.reset_index()

print('\nThe new dataframe:')
print(reset_index_df)

Это возвращает следующие DataFrames:

The original dataframe:
         Age Birth City Gender
Name                          
Jane      23    Toronto      F
Melissa   45    Atlanta      F
John      35    Toronto      M
Matt      64    Atlanta      M

The new dataframe:
      Name  Age Birth City Gender
0     Jane   23    Toronto      F
1  Melissa   45    Atlanta      F
2     John   35    Toronto      M
3     Matt   64    Atlanta      M

Давайте более подробно рассмотрим, как мы использовали метод .reset_index() для сброса индекса и включения его в набор данных:

  1. Мы создали DataFrame и распечатали его оригинальную версию. В ней видно, что у DataFrame есть именованный индекс

  2. Мы затем применяем метод .reset_index() к DataFrame, не передавая никаких аргументов.

  3. Это возвращает DataFrame, в который исходный индекс добавлен в DataFrame как столбец.

Теперь давайте посмотрим, как мы можем сбросить индекс в Pandas и удалить значения исходного столбца.

Как удалить индекс DataFrame в Pandas

По умолчанию Pandas преобразует исходный индекс в столбец DataFrame. Это может не всегда соответствовать вашим ожиданиям. К счастью, Pandas предлагает полезный параметр, drop=, который позволяет нам удалить исходный индекс

По умолчанию параметр будет установлен в значение False, что означает, что оригинальный индекс не будет удален. Если установить параметр в значение drop=True, то оригинальный индекс не будет вставлен в DataFrame в качестве столбца.

# Reset a dataframe index and drop the original index
import pandas as pd
df = pd.DataFrame({'Name': ['Jane', 'Melissa', 'John', 'Matt'], 'Age': [23, 45, 35, 64],'Birth City': ['Toronto', 'Atlanta', 'Toronto', 'Atlanta'], 'Gender': ['F', 'F', 'M', 'M']}).set_index('Name')

print('The original dataframe:')
print(df)

reset_index_df = df.reset_index(drop=True)

print('\nThe new dataframe:')
print(reset_index_df)

Давайте посмотрим, как выглядят эти DataFrame:

The original dataframe:
         Age Birth City Gender
Name                          
Jane      23    Toronto      F
Melissa   45    Atlanta      F
John      35    Toronto      M
Matt      64    Atlanta      M

The new dataframe:
   Age Birth City Gender
0   23    Toronto      F
1   45    Atlanta      F
2   35    Toronto      M
3   64    Atlanta      M

Как видно выше, когда мы сбрасываем индекс и устанавливаем drop=True, оригинальный индекс не был добавлен в DataFrame в качестве столбца.

В следующем разделе вы узнаете, как сбросить индекс Pandas на месте, то есть вам не нужно будет его переназначать.

Как сбросить индекс Pandas на месте

В предыдущих разделах этого руководства мы сбрасывали индекс и всегда переприсваивали DataFrame самому себе. Мы делали это потому что метод возвращает сам DataFrame.

Однако не всегда может возникнуть желание повторно присваивать DataFrame. По этой причине Pandas позволяет сбрасывать индекс Pandas на месте, используя параметр inplace=. По умолчанию этот параметр будет установлен в

Однако вы можете установить параметр в значение True, чтобы не приходилось повторно присваивать DataFrame.

Одно из преимуществ использования inplace=True заключается в том, что это может экономить память, модифицируя оригинальный объект вместо создания нового. Это может быть важно при работе с очень большими наборами данных, где использование памяти является обеспокоенностью.

Одним из недостатков этого подхода является ухудшение читаемости кода. Поскольку многие операции в Pandas могут выполняться на месте, очень важно придерживаться консистентности. Лично я рекомендую повторно присваивать DataFrame самому себе, если только я не работаю с особенно большим набором данных.

Давайте посмотрим, как можно удалить индекс DataFrame в Pandas на месте:

# Reset a Dataframe Index inlace
import pandas as pd
df = pd.DataFrame({'Name': ['Jane', 'Melissa', 'John', 'Matt'], 'Age': [23, 45, 35, 64],'Birth City': ['Toronto', 'Atlanta', 'Toronto', 'Atlanta'], 'Gender': ['F', 'F', 'M', 'M']}).set_index('Name')

print('The original dataframe:')
print(df)

df.reset_index(inplace=True)

print('\nThe new dataframe:')
print(df)

Запуск этого кода возвращает следующие DataFrames.

The original dataframe:
         Age Birth City Gender
Name                          
Jane      23    Toronto      F
Melissa   45    Atlanta      F
John      35    Toronto      M
Matt      64    Atlanta      M

The new dataframe:
      Name  Age Birth City Gender
0     Jane   23    Toronto      F
1  Melissa   45    Atlanta      F
2     John   35    Toronto      M
3     Matt   64    Atlanta      M

Как мы видим из предыдущего вывода, индекс DataFrame был удален на месте. Это означает, что результат выглядит так же, как и то, что мы видели ранее. В следующем разделе вы научитесь сбрасывать многоуровневый индекс Pandas — приступим!

Как сбросить многоуровневый индекс Pandas

При работе с Pandas DataFrames с многоуровневым индексом, управление и манипулирование структурой индексации ваших данных может показаться сложной задачей. К счастью, метод .reset_index() может помочь упростить индексацию вашего DataFrame с многоуровневым индексом, позволяя сжать один или несколько уровней индекса в один столбец или даже полностью убрать индекс.

В этом разделе вы научитесь сбрасывать индекс в DataFrame Pandas с несколькими индексами, чтобы вы могли перестроить уровни DataFrame в соответствии с вашими потребностями анализа или экспортировать данные в другие приложения. Давайте начнем с загрузки нового образца DataFrame:

# Creating a Multi-Index Pandas DataFrames
import pandas as pd
df = pd.DataFrame({'Name': ['Jane', 'Melissa', 'John', 'Matt'], 'Age': [23, 45, 35, 64],'Birth City': ['Toronto', 'Atlanta', 'Toronto', 'Atlanta'], 'Gender': ['F', 'F', 'M', 'M']}).set_index(['Gender', 'Name'])
print(df)

# Returns:
#                 Age Birth City
# Gender Name                   
# F      Jane      23    Toronto
#        Melissa   45    Atlanta
# M      John      35    Toronto
#        Matt      64    Atlanta

Здесь мы видим два индекса. Сбросить их легко - это происходит так же, как если бы был только один индекс. Это потому что значения аргументов по умолчанию позволяют нам сбросить все уровни (используя level=None) и заполнить пропущенные значения с помощью col_fill=''

Благодаря этим параметрам по умолчанию, когда мы используем метод .reset_index(), мы получаем ожидаемые результаты!

print('The original dataframe:')
print(df)

reset_index_dataframe = df.reset_index()

print('\nThe new dataframe:')
print(reset_index_dataframe)

Это возвращает следующий DataFrame:

The original dataframe:
                Age Birth City
Gender Name                   
F      Jane      23    Toronto
       Melissa   45    Atlanta
M      John      35    Toronto
       Matt      64    Atlanta

The new dataframe:
  Gender     Name  Age Birth City
0      F     Jane   23    Toronto
1      F  Melissa   45    Atlanta
2      M     John   35    Toronto
3      M     Matt   64    Atlanta

Из приведенных выше блоков кода видно, что индексные столбцы были сброшены и добавлены в DataFrame в виде столбцов. В исходном многоуровневом индексе повторяющиеся значения в столбцах не отображались. Однако в результирующем DataFrame эти значения дублируются вниз.

В следующем разделе вы узнаете, как сбросить только один уровень мультииндексного DataFrame.

Как сбросить только один уровень многоуровневого индекса Pandas

При работе с DataFrame в Pandas с многоуровневым индексом не всегда требуется сбрасывать все уровни индексов. К счастью, Pandas предлагает мощную функцию, которая позволяет выборочно сбрасывать определенные уровни многоуровневого индекса вашего DataFrame. Эта функция называется параметромlevel=

Используя параметр level=, вы можете нацелиться на определённые уровни индекса и сбросить только их, оставляя другие уровни без изменений. Это может быть особенно полезно, когда вам нужно сохранить определённые иерархические группировки в ваших данных, но хотите переорганизовать другие уровни структуры индексации.

# Reset only one level of a multi-index Pandas DataFrame
import pandas as pd
df = pd.DataFrame({'Name': ['Jane', 'Melissa', 'John', 'Matt'], 'Age': [23, 45, 35, 64],'Birth City': ['Toronto', 'Atlanta', 'Toronto', 'Atlanta'], 'Gender': ['F', 'F', 'M', 'M']}).set_index(['Gender', 'Name'])

print('The original dataframe:')
print(df)

reset_index_dataframe = df.reset_index(level=1)

print('\nThe new dataframe:')
print(reset_index_dataframe)

Это возвращает следующий DataFrame:

The original dataframe:
                Age Birth City
Gender Name                   
F      Jane      23    Toronto
       Melissa   45    Atlanta
M      John      35    Toronto
       Matt      64    Atlanta

The new dataframe:
           Name  Age Birth City
Gender                         
F          Jane   23    Toronto
F       Melissa   45    Atlanta
M          John   35    Toronto
M          Matt   64    Atlanta

При выполнении метода .reset_index(level = 1) на данном DataFrame мы выборочно сбрасываем второй уровень мультииндекса, то есть ‘Name’, превращая его из мультиуровневого индекса в одиночный индекс, при этом уровень ‘Gender’ остается без изменений.

Заключение

Поздравляем! Вы научились как профессионал сбрасывать индексы DataFrame в Pandas! В этом учебнике мы начали с основ и рассмотрели некоторые из самых важных и практических применений метода .reset_index() в Pandas.

Будь вы опытным аналитиком данных или только начинаете работать с Python и Pandas, овладение методом .reset_index() является обязательным при работе со сложными структурами данных.

Итак, что дальше? Попробуйте самостоятельно экспериментировать с функцией .reset_index() на своих фреймах данных и изучить влияние различных значений параметров, таких как параметр level. Кроме того, вы можете исследовать другие функции Pandas, дополняющие .reset_index(), например, .set_index(), чтобы дальше совершенствовать и манипулировать вашими структурами данных.

Чтобы узнать больше о методе reset_index() в Pandas, ознакомьтесь с официальной документацией здесь.

Дополнительные ресурсы

Чтобы узнать больше о смежных темах, ознакомьтесь с нижеприведенными ресурсами:

  • Индекс переименования Pandas: как переименовать индекс Dataframe Pandas

  • Индексирование, выбор и присвоение данных в Pandas

Last updated