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

Как добавить индексы в pandas

  • автор:

Как добавить индекс и значения всей строки None к имеющемуся фрейму данных?

Есть фрейму данных df , нужно добавить последней строкой значения None с индексом «моя строка».

for ind in df2.index: if ind not in df1.index: df1.at[ind] = None # df1.loc[(ind),[None]] 
df1 Column1 Column2
index 1 4
First 2 5
Second 3 6
df2 Column1 Column2
index 1 5
First 2 6
Second 3 7
Моя строка 4 8
df1 (после преобразования) Column1 Column2
index 1 4
First 2 5
Second 3 6
Моя строка None None

Отслеживать

51.6k 201 201 золотой знак 63 63 серебряных знака 245 245 бронзовых знаков

задан 27 апр 2021 в 8:15

Elena Barbanova Elena Barbanova

615 5 5 серебряных знаков 15 15 бронзовых знаков

@MaxU привела скрин, сейчас еще ссылку на файл добавлю

27 апр 2021 в 8:25

Плюс за пример данных текстом.

3 мая 2021 в 16:29

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

In [5]: df = pd.DataFrame([[1,4], [2,5], [3,6]], columns=["Column1", "Column2"], index=["index", "First", "Second"]) In [6]: df Out[6]: Column1 Column2 index 1 4 First 2 5 Second 3 6 In [7]: df.loc["Моя строка"] = [np.nan] * df.shape[1] In [8]: df Out[8]: Column1 Column2 index 1.0 4.0 First 2.0 5.0 Second 3.0 6.0 Моя строка NaN NaN 

Отслеживать

ответ дан 27 апр 2021 в 8:39

MaxU — stand with Ukraine MaxU — stand with Ukraine

149k 12 12 золотых знаков 59 59 серебряных знаков 132 132 бронзовых знака

Спасибо огромное

27 апр 2021 в 9:14

к той же задаче, но немного другой вопрос. После того, как я добавила строки к первому дата фрейму и хочу их сшить, то применяю функцию concat. df_all = pd.concat([df1, df2],axis=’columns’, keys=[‘First’, ‘Second’], sort=False)/. Но выходит ошибка Shape of passed values is (113, 56), indices imply (110, 56).

27 апр 2021 в 9:29

@ElenaBarbanova задайте новый вопрос.

Работа с индексами — 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 студентов

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

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

Pandas: как установить столбец в качестве индекса

Вы можете использовать следующий синтаксис, чтобы установить столбец в pandas DataFrame в качестве индекса:

#set one column as index df.set_index('col1') #set multiple columns as multi index df.set_index(['col1', 'col2']) 

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

import pandas as pd #create DataFrame df = pd.DataFrame() #view DataFrame df points assists team conference 0 5 11 A 1 1 7 8 B 2 2 7 10 C 3 3 9 6 D 4 4 12 6 E 5 5 9 5 F 6 

Пример 1: установка одного столбца в качестве индекса

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

df.set_index('team') points assists conference team A 5 11 1 B 7 8 2 C 7 10 3 D 9 6 4 E 12 6 5 F 9 5 6 

Пример 2. Установка нескольких столбцов в качестве индекса

В следующем коде показано, как установить несколько столбцов фрейма данных pandas в качестве мультииндекса :

df.set_index(['team', 'conference']) points assists team conference A 1 5 11 B 2 7 8 C 3 7 10 D 4 9 6 E 5 12 6 F 6 9 5 

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

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