Перейти к содержимому

Как поменять индекс в pandas

  • автор:

Как изменить индексы элементов при срезе DataFrame в Pandas?

Имеется DataFrame df_ab в который считывается 100.000 строк из файла csv . Делается срез чётных df_ab[0::2] и нечётных df_ab[1::2] элементов. Получается 2 DataFrame df_a и df_b , но индексы у них тоже чередуются.

import pandas as pd df_a = pd.DataFrame() df_b = pd.DataFrame() # пример из 1 столбца на 10 элементов (исходно 2 столбца) df_ab = pd.DataFrame() df_a = df_ab[0::2] df_b = df_ab[1::2] df_a = df_a.astype('int32') df_b = df_b.astype('int32') print('\na:\n', df_a) print('\nb:\n', df_b) 
a: AB 0 0 2 2 4 4 6 6 8 8 b: AB 1 1 3 3 5 5 7 7 9 9 

Как сделать что бы индексы шли по порядку:

a: AB 0 0 1 2 2 4 3 6 4 8 b: AB 0 1 1 3 2 5 3 7 4 9 

Работа с индексами — Python: Pandas

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

Структура объекта DataFrame

Рассмотрим объект DataFrame . Он состоит из набора столбцов, каждый из которых является объектом Series :

import pandas as pd df_orders = pd.read_json('./data/Orders.xlsx') print(df_orders.head()) # => shop_1 shop_2 shop_3 shop4 # 0 7.0 1 7.0 8 # 1 4.0 2 4.0 5 # 2 3.0 5 NaN 3 # 3 8.0 12 8.0 7 # 4 15.0 11 13.0 9 

Применим функцию type() к столбцу df_orders :

print(type(df_orders['shop_1'])) # => pandas.core.series.Series 

Объект Series спроектирован, чтобы хранить одномерные структуры данных. Он состоит из двух связанных между собой массивов: меток и значений:

print(df_orders.shop_1) # => 0 7.0 # 1 4.0 # 2 3.0 # 3 8.0 # 4 15.0 # 5 21.0 # 6 NaN # Name: shop_1, dtype: float64 

Выбрать несколько столбцов можно следующим образом:

print(df_orders[['shop_1','shop_2']].head()) # => shop_1 shop_2 # 0 7.0 1 # 1 4.0 2 # 2 3.0 5 # 3 8.0 12 # 4 15.0 11 # 

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

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

print(df_orders.drop(['shop_4'], axis=1).head()) # => shop_1 shop_2 shop_3 # 0 7.0 1 7.0 # 1 4.0 2 4.0 # 2 3.0 5 NaN # 3 8.0 12 8.0 # 4 15.0 11 13.0 

В методе drop() нужно задавать значение параметра axis . Значение 0 будет указывать, что нужно исключить некоторые строки. Значение 1 указывает на исключение столбцов.

Метод drop() возвращает новый объект DataFrame и оставляет без изменений исходный.

Индексы объектов DataFrame и Series

У каждой строки объекта DataFrame или значения у Series есть индекс. Индекс может быть как числом, так и строкой. Список индексов объектов DataFrame и Series можно получить с помощью атрибута index :

print(df_orders.index) # RangeIndex(start=0, stop=7, step=1) print(df_orders.shop_1.index) # RangeIndex(start=0, stop=7, step=1) 

Если нужно, можно изменить значение индексов и имя столбца с индексами:

df_orders.index = range(0,16,2) df_orders.index.name = 'New indexes' print(df_orders.head()) # => shop_1 shop_2 shop_3 shop4 # New indexes # 0 7.0 1 7.0 8 # 2 4.0 2 4.0 5 # 4 3.0 5 NaN 3 # 6 8.0 12 8.0 7 # 8 15.0 11 13.0 9 

Строковые индексы обычно называют метки или ключи:

df_orders.index = ['a','b','c','d','e','f','g'] print(df_orders.head()) # => shop_1 shop_2 shop_3 shop_4 # a 7.0 1 7.0 8 # b 4.0 2 4.0 5 # c 3.0 5 NaN 3 # d 8.0 12 8.0 7 # e 15.0 11 13.0 9 

Методы получения значений по индексу

Разберем следующие методы:

  • loc() — метод выбора данных на основе меток строк
  • iloc() — метод выбора строк согласно их числовой позиции

loc()

Выберем одну строку из объекта DataFrame по ее метке:

print(df_orders.loc['b']) # => shop_1 4.0 # shop_2 2.0 # shop_3 4.0 # shop_4 5.0 # Name: b, dtype: float64 

Выберем несколько строк:

print(df_orders.loc[['b','c']]) # => shop_1 shop_2 shop_3 shop_4 # b 4.0 2 4.0 5 # c 3.0 5 NaN 3 

iloc()

Выберем одну строку:

print(df_orders.iloc[1]) # => shop_1 4.0 # shop_2 2.0 # shop_3 4.0 # shop_4 5.0 # Name: b, dtype: float64 

Выберем несколько строк:

print(df_orders.loc[[1,2]]) # => shop_1 shop_2 shop_3 shop_4 # b 4.0 2 4.0 5 # c 3.0 5 NaN 3 

Фильтрация строк и столбцов одновременно

Методы loc() и iloc() позволяют выполнять фильтрацию по строкам и столбцам одновременно. Пример для loc() :

print(df_orders.loc[['b','c'],['shop_2','shop_4']]) # => shop_2 shop_4 # b 2 5 # c 5 3 

Пример для iloc() :

print(df_orders.iloc[[2,4],[1,3]]) # => shop_2 shop4 # c 5 3 # e 11 9 

Как и при использовании методов отдельно для строк и столбцов, метод loc() ожидает на вход метки, а iloc() — номера позиций строк и столбцов.

Срезы

Срезы позволяют получать совокупности строк в определенном диапазоне. Пример:

print(df_orders.loc['b':'d']) # => shop_1 shop_2 shop_3 shop_4 # b 4.0 2 4.0 5 # c 3.0 5 NaN 3 # d 8.0 12 8.0 7 

В срез данных попали все строки между позициями 1 и 3 включительно. Позиции 1 и 3 соответствуют меткам ‘b’ и ‘d’. Можно строить более интересные срезы:

print(df_orders.loc['b':'f':2]) # => shop_1 shop_2 shop_3 shop_4 # b 4.0 2 4.0 5 # d 8.0 12 8.0 7 # f 21.0 18 17.0 21 

В данный срез попала каждая вторая строка между строками с метками ‘b’ и ‘f’.

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

print(df_orders.loc['b':'f':2, 'shop_1':'shop_3']) # => shop_1 shop_2 shop_3 # b 4.0 2 4.0 # d 8.0 12 8.0 # f 21.0 18 17.0 

В срез попала каждая вторая строка между строками с метками ‘b’ и ‘f’ и столбцы с метками от ‘shop_1’ до ‘shop_3’ включительно.

Аналогично получаются срезы с помощью метода iloc() . Приведем пример, который совпадает по результату с примером выше:

print(df_orders.iloc[1:6:2, 0:3]) # b 4.0 2 4.0 # d 8.0 12 8.0 # f 21.0 18 17.0 

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов

Наши выпускники работают в компаниях:

Как изменить одно или несколько значений индекса в Pandas

Вы можете использовать следующий синтаксис для изменения одного значения индекса в кадре данных pandas:

df.rename(index=, inplace= True ) 

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

df.rename(index=, inplace= True ) 

В следующих примерах показано, как использовать этот синтаксис на практике.

Пример 1: изменение одного значения индекса в Pandas DataFrame

Предположим, у нас есть следующие Pandas DataFrame:

import pandas as pd #create DataFrame df = pd.DataFrame() #make 'team' column the index column df.set_index('team', inplace= True ) #view DataFrame df points assists rebounds team A 25 5 11 B 12 7 8 C 15 7 10 D 14 9 6 E 19 12 6 F 23 9 5 G 25 9 9 H 29 4 12 

Мы можем использовать следующий код, чтобы заменить значение «A» в столбце индекса на «P»:

#replace 'A' with 'P' in index df.rename(index=, inplace= True ) #view updated DataFrame df points assists rebounds team P 25 5 11 B 12 7 8 C 15 7 10 D 14 9 6 E 19 12 6 F 23 9 5 G 25 9 9 H 29 4 12 

Обратите внимание, что значение «A» в исходном индексе было заменено, а все остальные значения остались прежними.

Пример 2: изменение нескольких значений индекса в Pandas DataFrame

Предположим, у нас есть тот же самый pandas DataFrame, что и раньше:

#view DataFrame df points assists rebounds team A 25 5 11 B 12 7 8 C 15 7 10 D 14 9 6 E 19 12 6 F 23 9 5 G 25 9 9 H 29 4 12 

Мы можем использовать следующий код для замены значений «A» и «B» в столбце индекса:

#replace 'A' with 'P' and replace 'B' with 'Q' in index df.rename(index=, inplace= True ) #view updated DataFrame df points assists rebounds team P 25 5 11 Q 12 7 8 C 15 7 10 D 14 9 6 E 19 12 6 F 23 9 5 G 25 9 9 H 29 4 12 

Обратите внимание, что значения «A» и «B» в исходном индексе были заменены, а все остальные значения остались прежними.

Вы можете использовать точно такой же синтаксис для замены любого количества значений в индексе.

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

В следующих руководствах объясняется, как выполнять другие распространенные операции в pandas:

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

Abstract representation of transforming an index into a column.

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

Приведем пример. Предположим, есть следующий DataFrame:

 value 1 100 2 200 3 300 

Здесь числа 1, 2, 3 являются индексом DataFrame. Цель — преобразовать этот индекс в столбец, чтобы получить следующий результат:

 index value 1 1 100 2 2 200 3 3 300 

Решение

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

df = df.reset_index()

Если необходимо назвать новый столбец иначе, а не «index», можно использовать параметр name :

df = df.reset_index(name='new_column_name')

Также, если необходимо удалить старый индекс и не добавлять его в DataFrame как новый столбец, можно использовать параметр drop=True :

df = df.reset_index(drop=True)

Заключение

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *