Как изменить индексы элементов при срезе 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

Библиотека 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 в столбец. Это может быть полезно во многих ситуациях, связанных с анализом и обработкой данных.