Привет! Ты уже умеешь загружать данные, выбирать колонки и фильтровать строки. Но что, если нужно добавить новый столбец — например, рассчитать выручку как произведение цены на количество? Или удалить временные колонки, которые больше не нужны?
В этой статье мы разберём:
- Добавление новой колонки через присваивание
- Вставка колонки на нужную позицию:
insert() - Добавление вычисляемых колонок
- Удаление колонок через
drop() - Переименование колонок
- Цепочка операций с
assign()
- Что нужно знать перед началом
- Основная часть
- Подготовка данных
- Добавление новой колонки через присваивание
- Добавление колонки с одним значением
- Добавление колонки из списка
- Вставка колонки на нужную позицию: insert()
- Добавление вычисляемой колонки с условием
- Удаление колонок: drop()
- Удаление по имени
- Удаление нескольких колонок
- Удаление колонок по позиции
- Добавление колонок через assign()
- Переименование колонок
- Переименование нескольких колонок
- Переименование одной колонки
- Практический пример: подготовка данных для анализа
- Удаление колонок по условию
- Задачи для закрепления
- Нюансы и подводные камни
- Копия vs представление
- Перезапись существующих колонок
- Удаление inplace
- Частые ошибки и как их избежать
- Ошибка 1: Забыл axis=1 в drop()
- Ошибка 2: Несовпадение длины списка
- Ошибка 3: Использование inplace=True без осторожности
- Шпаргалка
- Заключение
- КВИЗ
- Что дальше?
Что нужно знать перед началом
Для этого урока тебе понадобится:
- Установленный Pandas (
pip install pandas) - Базовое понимание DataFrame
- Знание, как выбирать колонки
Совет: Добавление и удаление колонок — одна из самых частых операций при подготовке данных. Освоив её, ты будешь работать с таблицами гораздо быстрее!
Основная часть
Подготовка данных
import pandas as pd
import numpy as np
np.random.seed(42)
# Создаём данные о продажах
data = {
'Товар': ['Ноутбук', 'Телефон', 'Планшет', 'Ноутбук', 'Телефон', 'Планшет'],
'Продажи': [5, 12, 8, 3, 7, 4],
'Цена': [50000, 30000, 15000, 50000, 30000, 15000],
'Город': ['Москва', 'Москва', 'Москва', 'СПб', 'СПб', 'СПб']
}
df = pd.DataFrame(data)
print("Исходные данные:")
print(df)Результат:
Товар Продажи Цена Город
0 Ноутбук 5 50000 Москва
1 Телефон 12 30000 Москва
2 Планшет 8 15000 Москва
3 Ноутбук 3 50000 СПб
4 Телефон 7 30000 СПб
5 Планшет 4 15000 СПбДобавление новой колонки через присваивание
Самый простой способ добавить колонку — просто присвоить значение по новому имени:
# Добавляем колонку 'Выручка' как произведение 'Продажи' * 'Цена'
df['Выручка'] = df['Продажи'] * df['Цена']
print(df)Результат:
Товар Продажи Цена Город Выручка
0 Ноутбук 5 50000 Москва 250000
1 Телефон 12 30000 Москва 360000
2 Планшет 8 15000 Москва 120000
3 Ноутбук 3 50000 СПб 150000
4 Телефон 7 30000 СПб 210000
5 Планшет 4 15000 СПб 60000Совет: Если колонка уже существует, её значение будет перезаписано. Будь осторожен!
Добавление колонки с одним значением
# Добавляем колонку 'Скидка' со значением 5% для всех строк
df['Скидка'] = 0.05
print(df)Результат:
Товар Продажи Цена Город Выручка Скидка
0 Ноутбук 5 50000 Москва 250000 0.05
1 Телефон 12 30000 Москва 360000 0.05
2 Планшет 8 15000 Москва 120000 0.05
3 Ноутбук 3 50000 СПб 150000 0.05
4 Телефон 7 30000 СПб 210000 0.05
5 Планшет 4 15000 СПб 60000 0.05Совет: Это удобно для добавления константных значений (например, ставка НДС, коэффициент).
Добавление колонки из списка
# Добавляем колонку из списка
new_values = [10, 20, 15, 8, 12, 10]
df['Бонус'] = new_values
print(df[['Товар', 'Бонус']])Результат:
Товар Бонус
0 Ноутбук 10
1 Телефон 20
2 Планшет 15
3 Ноутбук 8
4 Телефон 12
5 Планшет 10Совет: Длина списка должна совпадать с длиной DataFrame. Иначе будет ошибка.
Вставка колонки на нужную позицию: insert()
insert() позволяет вставить колонку в определённое место:
# Вставляем колонку 'ID' на позицию 0 (в самое начало)
df.insert(0, 'ID', range(1, len(df) + 1))
print(df)Результат:
ID Товар Продажи Цена Город Выручка Скидка Бонус
0 1 Ноутбук 5 50000 Москва 250000 0.05 10
1 2 Телефон 12 30000 Москва 360000 0.05 20
2 3 Планшет 8 15000 Москва 120000 0.05 15
3 4 Ноутбук 3 50000 СПб 150000 0.05 8
4 5 Телефон 7 30000 СПб 210000 0.05 12
5 6 Планшет 4 15000 СПб 60000 0.05 10Совет:
insert(loc, column, value)—locэто позиция (0 — первая колонка).
Добавление вычисляемой колонки с условием
Можно добавлять колонки на основе условий:
# Добавляем колонку 'Категория' на основе цены
df['Категория'] = df['Цена'].apply(
lambda x: 'Дорогой' if x > 30000 else 'Средний' if x > 20000 else 'Доступный'
)
print(df[['Товар', 'Цена', 'Категория']])Результат:
Товар Цена Категория
0 Ноутбук 50000 Дорогой
1 Телефон 30000 Дорогой
2 Планшет 15000 Доступный
3 Ноутбук 50000 Дорогой
4 Телефон 30000 Дорогой
5 Планшет 15000 ДоступныйСовет:
apply()с лямбда-функцией — мощный инструмент для создания колонок по условию.
Удаление колонок: drop()
Удаление по имени
# Удаляем колонку 'Бонус'
df = df.drop('Бонус', axis=1)
print(df.columns)Результат:
Index(['ID', 'Товар', 'Продажи', 'Цена', 'Город', 'Выручка', 'Скидка', 'Категория'], dtype='object')Удаление нескольких колонок
# Удаляем колонки 'Скидка' и 'Категория'
df = df.drop(['Скидка', 'Категория'], axis=1)
print(df.columns)Результат:
Index(['ID', 'Товар', 'Продажи', 'Цена', 'Город', 'Выручка'], dtype='object')Удаление колонок по позиции
# Удаляем первую колонку (ID) по позиции
df = df.drop(df.columns[0], axis=1)
print(df.columns)Результат:
Index(['Товар', 'Продажи', 'Цена', 'Город', 'Выручка'], dtype='object')Совет: Для удаления колонок обязательно указывай
axis=1(по умолчанию удаляются строки,axis=0).
Добавление колонок через assign()
assign() позволяет добавить несколько колонок в цепочке, не изменяя исходный DataFrame:
# Создаём новый DataFrame с добавленными колонками
df_new = df.assign(
НДС = df['Цена'] * 0.2,
Цена_с_НДС = df['Цена'] * 1.2
)
print(df_new[['Товар', 'Цена', 'НДС', 'Цена_с_НДС']])Результат:
Товар Цена НДС Цена_с_НДС
0 Ноутбук 50000 10000 60000
1 Телефон 30000 6000 36000
2 Планшет 15000 3000 18000
3 Ноутбук 50000 10000 60000
4 Телефон 30000 6000 36000
5 Планшет 15000 3000 18000Совет:
assign()не изменяет исходный DataFrame, а возвращает новый. Это полезно для цепочек операций.
Переименование колонок
Переименование нескольких колонок
# Переименовываем колонки
df = df.rename(columns={
'Товар': 'Product',
'Продажи': 'Sales',
'Цена': 'Price',
'Город': 'City',
'Выручка': 'Revenue'
})
print(df.columns)Результат:
Index(['Product', 'Sales', 'Price', 'City', 'Revenue'], dtype='object')Переименование одной колонки
df = df.rename(columns={'Product': 'Товар'})
print(df.columns)Совет:
rename()также не изменяет DataFrame, если не указатьinplace=True.
Практический пример: подготовка данных для анализа
import pandas as pd
import numpy as np
np.random.seed(42)
# Исходные данные
data = {
'Товар': ['Ноутбук', 'Телефон', 'Планшет', 'Ноутбук', 'Телефон', 'Планшет'],
'Продажи': [5, 12, 8, 3, 7, 4],
'Цена': [50000, 30000, 15000, 50000, 30000, 15000],
'Город': ['Москва', 'Москва', 'Москва', 'СПб', 'СПб', 'СПб']
}
df = pd.DataFrame(data)
print("=== Исходные данные ===")
print(df)
# 1. Добавляем ID
df.insert(0, 'ID', range(1, len(df) + 1))
# 2. Добавляем вычисляемые колонки
df['Выручка'] = df['Продажи'] * df['Цена']
df['НДС'] = df['Выручка'] * 0.2
df['Прибыль'] = df['Выручка'] - df['НДС']
# 3. Добавляем категорию по городу
df['Регион'] = df['Город'].apply(lambda x: 'Центр' if x == 'Москва' else 'Другие')
# 4. Удаляем временные колонки (если есть)
# df = df.drop(['НДС'], axis=1)
print("\n=== После обработки ===")
print(df)Результат:
=== Исходные данные ===
Товар Продажи Цена Город
0 Ноутбук 5 50000 Москва
1 Телефон 12 30000 Москва
2 Планшет 8 15000 Москва
3 Ноутбук 3 50000 СПб
4 Телефон 7 30000 СПб
5 Планшет 4 15000 СПб
=== После обработки ===
ID Товар Продажи Цена Город Выручка НДС Прибыль Регион
0 1 Ноутбук 5 50000 Москва 250000 50000 200000 Центр
1 2 Телефон 12 30000 Москва 360000 72000 288000 Центр
2 3 Планшет 8 15000 Москва 120000 24000 96000 Центр
3 4 Ноутбук 3 50000 СПб 150000 30000 120000 Другие
4 5 Телефон 7 30000 СПб 210000 42000 168000 Другие
5 6 Планшет 4 15000 СПб 60000 12000 48000 ДругиеУдаление колонок по условию
Иногда нужно удалить колонки, которые не удовлетворяют условию:
# Удаляем все колонки, где есть пропуски (NaN)
# df = df.dropna(axis=1)
# Удаляем колонки, где все значения одинаковы
df = df.loc[:, df.nunique() > 1]
print(df.columns)Совет: Это полезно для очистки данных от бесполезных колонок.
Задачи для закрепления
Задача 1. Добавь колонку ‘Бонус’ со значением 1000 для всех строк.
Задача 2. Добавь колонку ‘Скидка’ как 10% от цены.
Задача 3. Вставь колонку ‘Номер’ на позицию 0.
Задача 4. Удали колонку ‘Бонус’.
Задача 5. Переименуй колонку ‘Товар’ в ‘Продукт’.
Ответы:
Задача 1.
df['Бонус'] = 1000Задача 2.
df['Скидка'] = df['Цена'] * 0.1Задача 3.
df.insert(0, 'Номер', range(1, len(df) + 1))Задача 4.
df = df.drop('Бонус', axis=1)Задача 5.
df = df.rename(columns={'Товар': 'Продукт'})Нюансы и подводные камни
Копия vs представление
При добавлении колонок будь осторожен с копиями:
# Может не сработать
df_subset = df[df['Продажи'] > 5]
df_subset['Новая'] = 100 # Warning: SettingWithCopyWarning
# Правильно — используй copy()
df_subset = df[df['Продажи'] > 5].copy()
df_subset['Новая'] = 100Перезапись существующих колонок
При добавлении колонки с существующим именем она будет перезаписана без предупреждения:
df['Цена'] = df['Цена'] * 1.1 # Перезапись существующей колонкиУдаление inplace
drop() по умолчанию возвращает новый DataFrame. Для изменения исходного используй inplace=True:
df.drop('Бонус', axis=1, inplace=True)Частые ошибки и как их избежать
Ошибка 1: Забыл axis=1 в drop()
# Удаляет строку, а не колонку
df.drop('Товар')
# Правильно
df.drop('Товар', axis=1)Ошибка 2: Несовпадение длины списка
# Ошибка: длина списка не совпадает
df['Новая'] = [1, 2, 3] # ValueError
# Правильно
df['Новая'] = [1, 2, 3, 4, 5, 6]Ошибка 3: Использование inplace=True без осторожности
# Может не сработать, если df — копия
df_subset = df[df['Продажи'] > 5]
df_subset.drop('Цена', axis=1, inplace=True)
# Сначала сделай copy()
df_subset = df[df['Продажи'] > 5].copy()
df_subset.drop('Цена', axis=1, inplace=True)Шпаргалка
| Что нужно | Как пишется |
|---|---|
| Добавить колонку | df['Новая'] = значения |
| Добавить константу | df['Новая'] = 100 |
| Вставить на позицию | df.insert(0, 'Новая', значения) |
| Вычисляемая колонка | df['Выручка'] = df['Цена'] * df['Продажи'] |
| Удалить колонку | df.drop('Колонка', axis=1) |
| Удалить несколько | df.drop(['К1', 'К2'], axis=1) |
| Переименовать | df.rename(columns={'Старое': 'Новое'}) |
| Цепочка добавлений | df.assign(Новое1=..., Новое2=...) |
Заключение
Сегодня мы научились:
- Добавлять новые колонки через присваивание
- Вставлять колонки на нужную позицию с
insert() - Создавать вычисляемые колонки
- Удалять колонки через
drop() - Переименовывать колонки
- Использовать
assign()для цепочек операций






![Выбор колонок и строк: [] vs loc vs iloc](https://imi-ds.ru/wp-content/uploads/2026/08/vybor-kolonok-i-strok-vs-loc-vs-iloc-335x220.webp)

