Нашли ошибку?
базовыйpandas 3.0.6

Столбцы: добавить, изменить, удалить

Создать новый столбец из вычисления, переименовать или удалить столбцы.

Нужно знать:Выбор столбцов

Содержание статьи

Коротко

  • df["new"] = выражение добавляет или заменяет столбец на месте. Одно значение запишется во все строки.
  • df.assign(new=...) возвращает новую таблицу и удобно встраивается в цепочки. Внутри assign можно ссылаться на только что созданные столбцы через lambda d: … или pd.col("…").
  • insert(позиция, имя, значения) — добавить столбец в нужное место.
  • rename(columns={"старое": "новое"}) и drop(columns=[...]) возвращают новую таблицу.
  • pd.col("price") (новое в pandas 3.0) — короткая ссылка на столбец вместо lambda d: d["price"].

Синтаксис

df["new"] = df["a"] * 2
df.assign(new=lambda d: d["a"] * 2, other=pd.col("b") + 1)
df.insert(loc, column, value)
df.rename(columns={"old": "new"})
df.drop(columns=["a", "b"], errors="raise")

Параметры

ПараметрЧто делаетПо умолчанию
columnsв rename — словарь или функция для имён; в drop — список удаляемых столбцовNone
errorsв drop: "ignore" — не падать, если столбца нет"raise"
locв insert: позиция нового столбцаобязательный

Примеры

Данные для примеровиспользуются во всех примерах ниже
menu = pd.DataFrame({
    "item": ["латте", "чай", "раф"],
    "price": [180, 90, 220],
    "cost": [60, 15, 80],
})
Новый столбец
menu["margin"] = menu["price"] - menu["cost"]    # новый столбец из вычисления
menu["currency"] = "RUB"                          # одно значение на все строки
menu
Вывод
    item  price  cost  margin currency
0  латте    180    60     120      RUB
1    чай     90    15      75      RUB
2    раф    220    80     140      RUB
assign — новая таблица
menu.assign(
    margin=lambda d: d["price"] - d["cost"],
    margin_pct=lambda d: (d["margin"] / d["price"] * 100).round(1),
)
Вывод
    item  price  cost  margin  margin_pct
0  латте    180    60     120        66.7
1    чай     90    15      75        83.3
2    раф    220    80     140        63.6
pd.col вместо lambda
menu.assign(price_usd=pd.col("price") / 90)       # pd.col — ссылка на столбец (pandas 3.0)
Вывод
    item  price  cost  price_usd
0  латте    180    60   2.000000
1    чай     90    15   1.000000
2    раф    220    80   2.444444
Столбец на нужную позицию
menu.insert(1, "size", ["M", "L", "M"])           # вставить на позицию 1
menu
Вывод
    item size  price  cost
0  латте    M    180    60
1    чай    L     90    15
2    раф    M    220    80
Переименовать
menu.rename(columns={"item": "позиция", "price": "цена"})
Вывод
  позиция  цена  cost
0   латте   180    60
1     чай    90    15
2     раф   220    80
Удалить
menu.drop(columns=["cost"])
Вывод
    item  price
0  латте    180
1    чай     90
2    раф    220
Заменить значения
menu["price"] = (menu["price"] * 1.1).round()     # заменить значения столбца
menu
Вывод
    item  price  cost
0  латте  198.0    60
1    чай   99.0    15
2    раф  242.0    80

Подводные камни

rename, drop и assign не меняют исходную таблицу

Они возвращают новую таблицу — результат нужно сохранить: menu = menu.drop(columns=["cost"]). Таблицу на месте меняют присваивание (df["col"] = …, df.loc[…] = …), insert, pop и del df["col"].

Удаление несуществующего столбца

drop с опечаткойошибка: KeyError
menu.drop(columns=["discount"])
Ошибка
KeyError: "['discount'] not found in axis"

Если столбца может не быть — errors="ignore".