Как добавить столбец в dataframe python
Перейти к содержимому

Как добавить столбец в dataframe python

  • автор:

Как вставить столбец в фрейм данных Pandas

Часто вам может понадобиться вставить новый столбец в pandas DataFrame. К счастью, это легко сделать с помощью функции вставки () pandas, которая использует следующий синтаксис:

вставка (local, столбец, значение, allow_duplicates = False)

  • loc: Индекс для вставки столбца. Первый столбец равен 0.
  • столбец: Имя для нового столбца.
  • value: Массив значений для нового столбца.
  • allow_duplicates: разрешить или запретить совпадение имени нового столбца с именем существующего столбца. По умолчанию — Ложь.

В этом руководстве показано несколько примеров использования этой функции на практике.

Пример 1: вставить новый столбец в качестве первого столбца

Следующий код показывает, как вставить новый столбец в качестве первого столбца существующего DataFrame:

import pandas as pd #create DataFrame df = pd.DataFrame() #view DataFrame df points assists rebounds 0 25 5 11 1 12 7 8 2 15 7 10 3 14 9 6 4 19 12 6 #insert new column 'player' as first column player_vals = ['A', 'B', 'C', 'D', 'E'] df.insert (loc= 0 , column='player', value=player_vals) df player points assists rebounds 0 A 25 5 11 1 B 12 7 8 2 C 15 7 10 3 D 14 9 6 4 E 19 12 6 

Пример 2. Вставьте новый столбец в качестве среднего столбца

Следующий код показывает, как вставить новый столбец в качестве третьего столбца существующего DataFrame:

import pandas as pd #create DataFrame df = pd.DataFrame() #insert new column 'player' as third column player_vals = ['A', 'B', 'C', 'D', 'E'] df.insert (loc= 2 , column='player', value=player_vals) df points assists player rebounds 0 25 5 A 11 1 12 7 B 8 2 15 7 C 10 3 14 9 D 6 4 19 12 E 6 

Пример 3: вставить новый столбец в качестве последнего столбца

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

import pandas as pd #create DataFrame df = pd.DataFrame() #insert new column 'player' as last column player_vals = ['A', 'B', 'C', 'D', 'E'] df.insert (loc= len(df.columns) , column='player', value=player_vals) df points assists player rebounds 0 25 5 A 11 1 12 7 B 8 2 15 7 C 10 3 14 9 D 6 4 19 12 E 6 

Обратите внимание, что использование len(df.columns) позволяет вставить новый столбец в качестве последнего столбца в любом фрейме данных, независимо от того, сколько столбцов в нем может быть.

Вы можете найти полную документацию по функции insert() здесь .

Pandas: как добавить столбец из одного фрейма данных в другой

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

Метод 1: добавить столбец из одного фрейма данных в последнюю позицию столбца в другом

#add some_col from df2 to last column position in df1 df1['some_col']= df2['some_col'] 

Способ 2: добавить столбец из одного фрейма данных в определенную позицию в другом

#insert some_col from df2 into third column position in df1 df1.insert ( 2 , 'some_col', df2['some_col']) 

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

import pandas as pd #create first DataFrame df1 = pd.DataFrame() #view DataFrame print(df1) team position points 0 A G 4 1 A G 4 2 A F 6 3 A C 8 4 B G 9 5 B C 5 #create second DataFrame df2 = pd.DataFrame() #view DataFrame print(df2) team rebounds 0 A 12 1 A 7 2 A 8 3 A 8 4 B 5 5 B 11 

Пример 1: добавить столбец из одного фрейма данных в последнюю позицию столбца в другом

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

#add rebounds column from df2 to df1 df1['rebounds']= df2['rebounds'] #view updated DataFrame print(df1) team position points rebounds 0 A G 4 12 1 A G 4 7 2 A F 6 8 3 A C 8 8 4 B G 9 5 5 B C 5 11 

Обратите внимание, что столбец восстановления из второго кадра данных был добавлен в позицию последнего столбца первого кадра данных.

Пример 2: добавить столбец из одного фрейма данных в определенную позицию столбца в другом

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

#insert rebounds column from df2 into third column position of df1 df1.insert ( 2 , 'rebounds', df2['rebounds']) #view updated DataFrame print(df1) team position rebounds points 0 A G 12 4 1 A G 7 4 2 A F 8 6 3 A C 8 8 4 B G 5 9 5 B C 11 5 

Обратите внимание, что столбец восстановления из второго кадра данных был добавлен в позицию третьего столбца первого кадра данных.

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

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

4 способа добавления колонок в датафреймы Pandas

Pandas — это библиотека для анализа и обработки данных, написанная на языке Python. Она предоставляет множество функций и способов для управления табличными данными. Основная структура данных Pandas — это датафрейм, который хранит информацию в табличной форме с помеченными строками и столбцами.

В контексте данных строки представляют собой утверждения, или точки данных. Столбцы отражают свойства, или атрибуты утверждений. Рассмотрим эту структуру на простом примере. Допустим, каждая строка — это дом. В таком случае, столбцы заключают в себе сведения об этом доме (его возрасте, количестве комнат, стоимости и т.д.).

Добавление или удаление столбцов — обычная операция при анализе данных. Ниже мы разберем 4 различных способа добавления новых столбцов в датафрейм Pandas.

Сначала создадим простой фрейм данных для использования в примерах:

import numpy as np
import pandas as pd
df = pd.DataFrame( "B": [5, 6, 7, 8]>)df

Способ 1-й

Пожалуй, это самый распространенный путь создания нового столбца в Pandas:

df["C"] = [10, 20, 30, 40]df

Мы указываем имя столбца подобно тому, как выбираем столбец во фрейме данных. Затем этому столбцу присваиваются значения. Новый столбец добавляется последним (т. е. становится столбцом с самым высоким индексом).

Можно добавить сразу несколько столбцов. Их наименования перечисляются списком, а значения должны быть двумерными для совместимости с количеством строк и столбцов. Например, следующий код добавляет три столбца, заполненные случайными целыми числами от 0 до 10:

df[["1of3", "2of3", "3of3"]] = np.random.randint(10, size=(4,3))df

Давайте удалим эти три столбца, прежде чем перейти к следующему методу.

df.drop(["1of3", "2of3", "3of3"], axis=1, inplace=True)

Способ 2-й

В первом способе мы добавляли новый столбец в конец. Pandas также позволяет добавлять столбцы по определенному индексу. Для настройки расположения нового столба воспользуемся функцией вставки (insert function). Давайте добавим один столбец рядом с А:

df.insert(1, "D", 5)df

Для использования функции вставки необходимо 3 параметра: индекс, имя столбца и значение. Индексы столбцов начинаются с 0, поэтому мы устанавливаем параметр индекса 1, чтобы добавить новый столбец рядом со столбцом A. Мы можем указать постоянное значение, которое будет выставлено во всех строках.

Способ 3-й

Функция loc позволяет выбирать строки и столбцы, используя их метки. Таким же образом можно создать новый столбец:

df.loc[:, "E"] = list("abcd")df

Для выбора строк и столбцов мы указываем нужные метки. Если хотим выбрать все строки, ставим двоеточие. В части таблицы, где нужно проставить столбец, указываем метки столбцов, которые нам необходимо выбрать. Поскольку в датафрейме нет столбца E, Pandas создаст новый столбец.

Способ 4-й

Добавить столбцы можно также с помощью функции assign :

df = df.assign(F = df.C * 10)df

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

Надо понимать, что между функциями assign и insert есть существенное различие.

Функция вставки ( insert ) работает на месте. Это означает, что изменение (добавление нового столбца) сохраняется во фрейме данных.

С функцией назначения ситуация немного иная. Он возвращает измененный фрейм данных, но не изменяет исходный. Чтобы использовать измененную версию (с новым столбцом), нам нужно явно назначить ее.

Заключение

Мы рассмотрели 4 различных способа добавления новых столбцов в фрейм данных Pandas. Это обычная операция при анализе и обработке данных.

Мне нравится пользоваться библиотекой Pandas, поскольку она предоставляет, как правило, несколько способов для выполнения одной задачи. По-моему, это говорит о гибкости и универсальности Pandas.

  • 3 функции Pandas для группировки и агрегирования данных
  • 7 полезных операций в Pandas при работе с DataFrame
  • Новая библиотека превосходит Pandas по производительности

Добавить столбец в датафрейм Pandas с применением apply

Мне необходимо добавить новый столбец Country_3 по следующему правилу: если Country_1 = Russian Federation, то Country_3 равно Country_2. Иначе Country_3 равно Country_1.

Почему я не могу это сделать с помощью apply ? Вот мой код:

def function(col): if 'Russian Federation' in col: return stack['Country_2'] else: return stack['Country_1'] stack['Country_3'] = stack['Country_1'].apply(function) 

Отслеживать
149k 12 12 золотых знаков 59 59 серебряных знаков 132 132 бронзовых знака
задан 4 апр 2021 в 13:45
35 5 5 бронзовых знаков

2 ответа 2

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

Вариант 1: воспользуйтесь методом Series.mask():

stack["Country_3"] = \ stack["Country_1"].mask(stack["Country_1"]=="Russian Federation", stack["Country_2"]) 

Вариант 2: воспользуйтесь методом Series.where():

stack["Country_3"] = \ stack["Country_1"].where(stack["Country_1"]!="Russian Federation", stack["Country_2"]) 

Вариант 3: воспользуйтесь методом np.where():

stack["Country_3"] = \ np.where(stack["Country_1"]=="Russian Federation", stack["Country_2"], stack["Country_1"]) 
In [167]: stack Out[167]: Country_1 Country_2 Country_3 0 United States Russian Federation United States 1 Russian Federation Uzbekistan Uzbekistan 2 Bulgaria Russian Federation Bulgaria 3 Russian Federation Spain Spain 4 Russian Federation Montenegro Montenegro 

PS метод .apply() стоит использовать только в том случае если вы не можете найти другого векторизированного решения. В подавляющем большинстве случаев решение, использующее .apply(. ) окажется медленнее других векторизированных решений.

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

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