Добавляем новый столбец в существующий 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 или перезаписи существующих. В зависимости от ваших нужд вы можете выбрать один из этих методов.

Ответить