Как добавить индекс и значения всей строки 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

Библиотека 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