Добавление и удаление колонок

Добавление и удаление колонок Pandas

Привет! Ты уже умеешь загружать данные, выбирать колонки и фильтровать строки. Но что, если нужно добавить новый столбец — например, рассчитать выручку как произведение цены на количество? Или удалить временные колонки, которые больше не нужны?

В этой статье мы разберём:

  • Добавление новой колонки через присваивание
  • Вставка колонки на нужную позицию: insert()
  • Добавление вычисляемых колонок
  • Удаление колонок через drop()
  • Переименование колонок
  • Цепочка операций с assign()
Содержание
  1. Что нужно знать перед началом
  2. Основная часть
  3. Подготовка данных
  4. Добавление новой колонки через присваивание
  5. Добавление колонки с одним значением
  6. Добавление колонки из списка
  7. Вставка колонки на нужную позицию: insert()
  8. Добавление вычисляемой колонки с условием
  9. Удаление колонок: drop()
  10. Удаление по имени
  11. Удаление нескольких колонок
  12. Удаление колонок по позиции
  13. Добавление колонок через assign()
  14. Переименование колонок
  15. Переименование нескольких колонок
  16. Переименование одной колонки
  17. Практический пример: подготовка данных для анализа
  18. Удаление колонок по условию
  19. Задачи для закрепления
  20. Нюансы и подводные камни
  21. Копия vs представление
  22. Перезапись существующих колонок
  23. Удаление inplace
  24. Частые ошибки и как их избежать
  25. Ошибка 1: Забыл axis=1 в drop()
  26. Ошибка 2: Несовпадение длины списка
  27. Ошибка 3: Использование inplace=True без осторожности
  28. Шпаргалка
  29. Заключение
  30. КВИЗ
  31. Что дальше?

Что нужно знать перед началом

Для этого урока тебе понадобится:

  • Установленный 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() для цепочек операций

КВИЗ

Что дальше?

Оцените статью
IMI-DS - PYTHON LERNEN
Содержание
Оглавление ×