Удаление индексной колонки DataFrame в Pandas: Руководство с примерами

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

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

В приведенном ниже обзоре вы узнаете, как удалять столбец индекса в DataFrame библиотеки Pandas.

Быстрый ответ: Используйте Pandas .reset_index(drop=True), чтобы удалить столбец индекса

# Dropping an Index Column in Pandas
import pandas as pd
df = pd.DataFrame.from_dict({
    'Name': ['Jane', 'Nik', 'Kate', 'Melissa'],
    'Age': [10, 35, 34, 23]
}).set_index('Name')

df = df.reset_index(drop=True)

Содержание

Что такое столбец индекса Pandas?

Индекс в Pandas аналогичен номеру строки в Excel. Однако сказать только это было бы недооценкой индекса. Это потому, что он гораздо больше, чем просто номер строки. Мы можем думать об индексе строки как о способе доступа к записям DataFrame – подобно адресу или ключу словаря.

По умолчанию, если конкретный индекс не передается, Pandas автоматически генерирует индекс. Этот индекс начинается с числа 0 и доходит до длины DataFrame минус 1. Такой тип индекса называется RangeIndex (поскольку он представляет значения из функции диапазона). Однако, если вы работаете с конкретными данными, например, с временными рядами, вы можете захотеть индексировать ваши данные другим столбцом.

Understanding Pandas DataFrames Columns, Axis, Rows
Понимание DataFrame Pandas (включая его индекс)

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

Примечание: Хотя технически индексы существуют и в колонках DataFrame (то есть вдоль оси 1), когда в этой статье упоминается индекс, я имею в виду только индекс строки.

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

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

# Loading a Sample Pandas Dataframe
import pandas as pd

df = pd.DataFrame.from_dict({
    'Name': ['Jane', 'Nik', 'Kate', 'Melissa'],
    'Age': [10, 35, 34, 23],
    'Height': [130, 178, 155, 133],
    'Weight': [80, 200, 220, 150]
}).set_index('Name')

print(df)

# Returns:
#          Age  Height  Weight
# Name                        
# Jane      10     130      80
# Nik       35     178     200
# Kate      34     155     220
# Melissa   23     133     150

В приведенном выше блоке кода мы использовали метод .head() для вывода первых записей DataFrame. Здесь можно видеть, что теперь у нас есть DataFrame с индексом Name и еще тремя колонками. Мы использовали метод .set_index(), чтобы установить индекс DataFrame.

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

Удаление столбца индекса Pandas с использованием reset_index

Самый простой способ удалить индекс DataFrame в Pandas - использовать метод .reset_index() Pandas. По умолчанию метод сбросит только индекс, создавая RangeIndex (от 0 до длины DataFrame минус 1). Этот прием также вставит индекс DataFrame в колонку в DataFrame.

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

# Resetting a dataframe index with .reset_index()
df = df.reset_index()
print(df.head())

# Returns:
#       Name  Age  Height  Weight
# 0     Jane   10     130      80
# 1      Nik   35     178     200
# 2     Kate   34     155     220
# 3  Melissa   23     133     150
# 4     Evan   70     195     140

Мы видим, что индексная колонка была заменена на RangeIndex, а оригинальные колонки были переданы в DataFrame как другая колонка.

Удаление столбца индекса Pandas и его удаление

Если мы хотим сбросить индекс DataFrame и не сохранять его, мы можем использовать аргумент drop=True, указывая Pandas на необходимость сбросить индекс и удалить исходные значения. Давайте посмотрим, как это выглядит:

# Drop a Pandas Dataframe index with .reset_index() Method
df = df.reset_index(drop=True)
print(df.head())

# Returns:
#    Age  Height  Weight
# 0   10     130      80
# 1   35     178     200
# 2   34     155     220
# 3   23     133     150
# 4   70     195     140

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

Удаление индекса Pandas из многоиндексного фрейма данных

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

# Creating a MultiIndex DataFrame
import pandas as pd

df = pd.DataFrame.from_dict({
    'Gender': ['Female', 'Male', 'Female', 'Female'],
    'Name': ['Jane', 'Nik', 'Kate', 'Melissa'],
    'Age': [10, 35, 34, 23],
    'Height': [130, 178, 155, 133],
    'Weight': [80, 200, 220, 150]
}).set_index(['Gender', 'Name'])

print(df.head())

# Returns:
#                 Age  Height  Weight
# Gender Name                        
# Female Jane      10     130      80
# Male   Nik       35     178     200
# Female Kate      34     155     220
#        Melissa   23     133     150

Чтобы удалить оба индекса, вы можете просто вызвать метод .reset_index(drop=True). Однако, если вы хотите удалить только один индекс, вы должны использовать параметр level=. Давайте посмотрим, как мы можем удалить индексную колонку 'Gender', сохраняя при этом значения:

# Dropping a Single MultiIndex and Keeping Values
df = df.reset_index(level='Gender')
print(df)

# Returns:
#          Gender  Age  Height  Weight
# Name                                
# Jane     Female   10     130      80
# Nik        Male   35     178     200
# Kate     Female   34     155     220
# Melissa  Female   23     133     150

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

Удаление индекса Pandas из многоиндексного фрейма данных и удаление значений

Аналогично, при работе с многомерными DataFrames мы можем удалить только один столбец индекса и очистить все его значения. Для этого нам также нужно передать drop=True, как показано ниже:

# Dropping a Single MultiIndex and Dropping Values
import pandas as pd

df = pd.DataFrame.from_dict({
    'Gender': ['Female', 'Male', 'Female', 'Female'],
    'Name': ['Jane', 'Nik', 'Kate', 'Melissa'],
    'Age': [10, 35, 34, 23],
    'Height': [130, 178, 155, 133],
    'Weight': [80, 200, 220, 150]
}).set_index(['Gender', 'Name'])

df = df.reset_index(level='Gender', drop=True)

print(df)

# Returns:
#          Age  Height  Weight
# Name                        
# Jane      10     130      80
# Nik       35     178     200
# Kate      34     155     220
# Melissa   23     133     150

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

В следующем разделе вы узнаете, как использовать метод .set_index() в Pandas для удаления индекса DataFrame.

Удаление столбца индекса Pandas с помощью set_index

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

Мы также можем использовать обходной путь, установив индекс с помощью столбца, который просто копирует обычный паттерн индекса. Мы можем сделать это, создав столбец, который содержит значения от 0 до длины списка минус 1. Это можно сделать напрямую с использованием метода .assign(), который можно использовать для добавления столбца в DataFrame Pandas. Затем мы используем метод .set_index() для установки этого нового столбца в качестве индекса DataFrame.

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

# Delete a Pandas Dataframe Index with .set_index()
df = df.assign(Index=range(len(df))).set_index('Index')
print(df.head())

# Returns:
#    Age  Height  Weight
# 0   10     130      80
# 1   35     178     200
# 2   34     155     220
# 3   23     133     150
# 4   70     195     140

В этом примере сначала создаётся столбец с названием «Index» с использованием метода .assign(). После этого к нему применяется метод .set_index(), который назначает этот новый столбец в качестве индекса. Это приводит к перезаписи и удалению предыдущего индекса.

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

Чтение CSV-файла в DataFrame Pandas без индекса

Вы можете столкнуться с неправильно сформированными CSV-файлами, например, с теми, в которых разделитель находится в конце данной строки. Они могут выглядеть следующим образом:

Age,Height,Weight
10,130,80,
35,178,200,
34,155,220,
23,133,150,
70,195,140,
55,150,95,
89,205,180,

Из-за наличия завершающей запятой, Pandas неправильно интерпретирует первые значения как значения индекса. Когда мы считываем файл в DataFrame, он будет выглядеть так:

# Reading a malformed .csv file with Pandas
df = pd.read_csv('file.csv')
print(df.head())

# Returns:
#     Age  Height  Weight
# 10  130      80     NaN
# 35  178     200     NaN
# 34  155     220     NaN
# 23  133     150     NaN
# 70  195     140     NaN

Конечно, это не то, что нам нужно. Мы хотели бы, чтобы данные были правильно выровнены по столбцам так, чтобы в конце возвращался пустой столбец. Поскольку такие файлы часто можно встретить, Pandas представил параметр, который позволяет перезаписать поведение по умолчанию при использовании

Давайте посмотрим, что произойдет, если мы передадим index_col = False в нашу функцию:

# Reading a malformed CSV file correctly with Pandas
df = pd.read_csv('file.csv', index_col=False)
print(df.head())

# Returns:
#    Age  Height  Weight
# 0   10     130      80
# 1   35     178     200
# 2   34     155     220
# 3   23     133     150
# 4   70     195     140

Используя аргумент index_col=False, Pandas изменяет поведение по умолчанию и назначает правильный индекс.

Заключение

В этом учебнике вы научились использовать Pandas для удаления индексного столбца. Вы узнали, как использовать методы Pandas .reset_index() и .set_index() для удаления индекса. Вы также научились как читать, так и записывать CSV-файл в DataFrame Pandas. Умение работать с индексами в Pandas является полезным навыком, поскольку вы учитесь манипулировать данными с помощью Pandas.

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

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

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

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

  • Индекс сброса Pandas: как сбросить индекс Pandas

  • Изменение порядка столбцов Pandas: переиндексация Pandas и вставка Pandas

  • 4 способа использования Pandas для выбора столбцов в кадре данных

Last updated