Как вставить столбец в фрейм данных 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 pddf = 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(. ) окажется медленнее других векторизированных решений.