Добавляем новый столбец в существующий DataFrame в Pandas
В этой статье мы рассмотрим различные способы добавления нового столбца в существующий DataFrame в Pandas.
Создадим простой DataFrame, который будем использовать в качестве ссылки на протяжении всей этой статьи, чтобы продемонстрировать добавление новых столбцов в DataFrame.
# загружаем библиотеку pandas
import pandas as pd
# создаём DataFrame
df = pd.DataFrame({'team': ['India', 'South Africa', 'New Zealand', 'England'],
'points': [10, 8, 3, 5],
'runrate': [0.5, 1.4, 2, -0.6],
'wins': [5, 4, 2, 2]})
# выводим DataFrame
print(df)
Вывод
team points runrate wins
0 India 10 0.5 5
1 South Africa 8 1.4 4
2 New Zealand 3 2.0 2
3 England 5 -0.6 2
Мы создали DataFrame и теперь предположим, что нам нужно добавить новый столбец с количеством поражений команды.
1 способ. Объявляем и назначаем новый список в виде столбца
Самый простой способ – создать новый список и назначить список новому столбцу. Рассмотрим этот способ на примере.
# загружаем библиотеку pandas
import pandas as pd
# создаём DataFrame
df = pd.DataFrame({'team': ['India', 'South Africa', 'New Zealand', 'England'],
'points': [10, 8, 3, 5],
'runrate': [0.5, 1.4, 2, -0.6],
'wins': [5, 4, 2, 2]})
# выводим DataFrame
print(df)
# добавляем новый список и переменные
match_lost = [2, 1, 3, 4]
# прикрепляем список к DataFrame
df["lost"] = match_lost
# Выводим DataFrame
print(df)
Вывод
team points runrate wins lost
0 India 10 0.5 5 2
1 South Africa 8 1.4 4 1
2 New Zealand 3 2.0 2 3
3 England 5 -0.6 2 4
2 способ. Используем метод Data Frame.insert()
Недостаток описанного выше подхода заключается в том, что мы не можем добавить столбец в указанную позицию, и по умолчанию столбец вставляется ближе к концу. Можно решить эту проблему с помощью pandas.DataFrame.insert()
.
В приведённом ниже примере вставим колонку “lost” перед колонкой “wins”. У нас это выйдет, если мы вставим новый столбец в индекс 2.
# загружаем библиотеку pandas
import pandas as pd
# создаём DataFrame
df = pd.DataFrame({'team': ['India', 'South Africa', 'New Zealand', 'England'],
'points': [10, 8, 3, 5],
'runrate': [0.5, 1.4, 2, -0.6],
'wins': [5, 4, 2, 2]})
# выводим DataFrame
print(df)
# вставляем столбец в нужном нам месте
df.insert(3, "lost", [2, 1, 3, 4], True)
# выводим DataFrame
print(df)
Вывод
team points runrate lost wins
0 India 10 0.5 2 5
1 South Africa 8 1.4 1 4
2 New Zealand 3 2.0 3 2
3 England 5 -0.6 4 2
3 способ. Используем метод DataFrame.assign()
Мы используем метод pandas.DataFrame.assign()
, когда хотим создать много колонок в DataFrame.
Этот метод выводит новый объект со всеми исходными столбцами в дополнение к новым. Все существующие переназначенные столбцы будут перезаписаны.
В приведённом ниже примере мы добавляем несколько столбцов в DataFrame.
# загружаем библиотеку pandas
import pandas as pd
# создаём DataFrame
df = pd.DataFrame({'team': ['India', 'South Africa', 'New Zealand', 'England'],
'points': [10, 8, 3, 5],
'runrate': [0.5, 1.4, 2, -0.6],
'wins': [5, 4, 2, 2]})
# выводим DataFrame
print(df)
# добавляем колонки к Pandas DataFrame
df2 = df.assign(lost=[2, 1, 3, 4], matches_remaining=[2, 3, 1, 1])
# выводим DataFrame
print(df2)
Вывод
team points runrate wins lost matches_remaining
0 India 10 0.5 5 2 2
1 South Africa 8 1.4 4 1 3
2 New Zealand 3 2.0 2 3 1
3 England 5 -0.6 2 4 1
4 способ. Используем метод pandas.concat()
Мы также можем использовать метод pandas.concat() для объединения нового столбца в DataFrame, передав axis=1 в качестве аргумента. Этот метод выводит новый DataFrame после объединения столбцов.
# загружаем библиотеку pandas
import pandas as pd
# создаём DataFrame
df = pd.DataFrame({'team': ['India', 'South Africa', 'New Zealand', 'England'],
'points': [10, 8, 3, 5],
'runrate': [0.5, 1.4, 2, -0.6],
'wins': [5, 4, 2, 2]})
# выводим DataFrame
print(df)
# создаём DataFrame
df2 = pd.DataFrame([[1, 2], [2, 1], [3, 4], [0, 3]],
columns=['matches_left', 'lost'])
# объединяем и выводим DataFrame
print(pd.concat([df, df2], axis=1))
Вывод
team points runrate wins matches_left lost
0 India 10 0.5 5 1 2
1 South Africa 8 1.4 4 2 1
2 New Zealand 3 2.0 2 3 4
3 England 5 -0.6 2 0 3
5 способ. Используем словарь
Также мы можем создать словарь, чтобы добавить новый столбец в DataFrame. Мы можем использовать существующие столбцы в качестве ключа к словарю и присваивать значения соответственно новому столбцу.
# загружаем библиотеку pandas
import pandas as pd
# создаём DataFrame
df = pd.DataFrame({'team': ['India', 'South Africa', 'New Zealand', 'England'],
'points': [10, 8, 3, 5],
'runrate': [0.5, 1.4, 2, -0.6],
'wins': [5, 4, 2, 2]})
# выводим DataFrame
print(df)
# Создаём новый словарь с ключами к столбцам
# и значениями новых столбцов
match_lost = {2: 'India', 1: 'South Africa', 3: 'New Zealand', 0: 'England'}
# объединяем словарь со столбцами DataFrame
df['lost'] = match_lost
# выводим Dataframe
print(df)
Вывод
team points runrate wins lost
0 India 10 0.5 5 2
1 South Africa 8 1.4 4 1
2 New Zealand 3 2.0 2 3
3 England 5 -0.6 2 0
Заключение
В этой статье мы рассмотрели 5 подходов к созданию и назначению списка, insert(), assign(), concat() и словаря для вставки новых столбцов в DataFrame или перезаписи существующих. В зависимости от ваших нужд вы можете выбрать один из этих методов.