Топ-5 методов добавления столбцов в pandas: повысь эффективность

Пройдите тест, узнайте какой профессии подходите
Сколько вам лет
0%
До 18
От 18 до 24
От 25 до 34
От 35 до 44
От 45 до 49
От 50 до 54
Больше 55

Для кого эта статья:

  • Студенты и начинающие аналитики данных, изучающие pandas и Python
  • Практикующие аналитики и специалисты по данным, ищущие оптимальные подходы к манипуляции данными
  • Программисты и разработчики, интересующиеся улучшением навыков работы с библиотеками Python для анализа данных

    Манипуляция данными в pandas — это как владение швейцарским ножом в мире анализа данных. И самая частая операция? Безусловно, работа со столбцами! 📊 Признаюсь, за годы работы с датасетами я столкнулся с десятками способов добавления и изменения столбцов, но для вашей продуктивности отобрал топ-5 методов, которые спасают в 95% ситуаций. Готовы превратить свои дата-фреймы из неуклюжих табличек в гибкие аналитические инструменты? Вперёд — разбираем каждый метод с примерами кода, который вы сможете сразу адаптировать под свои задачи.

Если вы хотите не просто выучить отдельные приемы работы с pandas, а овладеть Python как комплексным инструментом для анализа данных и разработки — обратите внимание на Обучение Python-разработке от Skypro. Курс построен на реальных кейсах и проектах, где манипуляция данными — только вершина айсберга. Вы освоите всю экосистему инструментов, которые превратят вас из новичка в востребованного специалиста за 9 месяцев.

Основные методы добавления столбцов в pandas DataFrame

Библиотека pandas произвела революцию в анализе данных на Python, предоставив мощный и гибкий инструмент для работы с табличными данными — DataFrame. Добавление новых столбцов в DataFrame — одна из базовых операций, которую вы будете выполнять постоянно. 🔄

Прежде чем погрузиться в конкретные методы, давайте создадим простой DataFrame, который будем использовать в примерах:

Python
Скопировать код
import pandas as pd

data = {
'Имя': ['Анна', 'Иван', 'Мария', 'Алексей'],
'Возраст': [25, 30, 22, 35],
'Город': ['Москва', 'Санкт-Петербург', 'Казань', 'Новосибирск']
}

df = pd.DataFrame(data)

Существует несколько основных подходов к добавлению столбцов, каждый из которых имеет свои преимущества в зависимости от контекста:

  • Индексация с квадратными скобками — самый прямолинейный метод
  • Метод assign() — функциональный подход, особенно полезный в цепочках методов
  • Метод insert() — когда позиция нового столбца имеет значение
  • Использование loc/iloc — для более сложных случаев доступа
  • Применение функций apply/map — когда новый столбец зависит от преобразований существующих данных

Выбор метода зависит от конкретной задачи, читаемости кода и того, работаете ли вы с копиями или модифицируете исходный DataFrame. Давайте разберем каждый подход детально.

Андрей Петров, Data Scientist Когда я только начинал карьеру аналитика данных, столкнулся с проектом по анализу потребительского поведения. Датасет содержал 150,000 строк транзакций, но не хватало критически важных столбцов — сезонности покупок и коэффициента ценности клиента. Сначала я пытался использовать циклы для вычислений (как в Excel), что заняло бы часы. Но коллега показал мне, как одной строчкой кода с использованием векторизации pandas добавить эти столбцы. То, что должно было занять полдня, было выполнено за 5 секунд. Именно тогда я понял силу правильного подхода к манипуляции данными в pandas.

Пошаговый план для смены профессии

Способ 1: Добавление столбца с помощью квадратных скобок

Добавление столбца с использованием квадратных скобок — самый интуитивно понятный способ для начинающих аналитиков. Этот метод аналогичен работе со словарями в Python, что делает его особенно удобным для быстрой модификации данных. 🚀

Синтаксис предельно прост:

Python
Скопировать код
# Добавление столбца с константным значением
df['Пол'] = ['Ж', 'М', 'Ж', 'М']

# Добавление столбца на основе вычислений
df['Год рождения'] = 2023 – df['Возраст']

# Проверим результат
print(df)

Результат выполнения кода:

Имя Возраст Город Пол Год рождения
Анна 25 Москва Ж 1998
Иван 30 Санкт-Петербург М 1993
Мария 22 Казань Ж 2001
Алексей 35 Новосибирск М 1988

Ключевые преимущества этого подхода:

  • Максимальная простота и читаемость кода
  • Возможность использования векторизированных операций
  • Прямое изменение исходного DataFrame без создания копии
  • Интуитивное понимание даже для новичков в pandas

Метод с квадратными скобками особенно эффективен в следующих сценариях:

  1. Когда нужно быстро добавить столбец с константным значением: df['Статус'] = 'Активен'
  2. При создании столбцов на основе математических операций: df['Площадь'] = df['Длина'] * df['Ширина']
  3. Для условного заполнения с использованием numpy.where: df['Категория'] = np.where(df['Возраст'] < 30, 'Молодой', 'Зрелый')

Важно помнить, что при использовании этого метода необходимо следить за размерностью данных. Если вы пытаетесь присвоить список, длина которого не соответствует количеству строк в DataFrame, pandas выдаст ошибку.

Python
Скопировать код
# Это вызовет ошибку, так как длины не совпадают
# df['Ошибка'] = [1, 2, 3] # у нас 4 строки в DataFrame

# Правильный вариант
df['Правильно'] = [1, 2, 3, 4] # Соответствует количеству строк

Для более сложных преобразований можно использовать лямбда-функции и метод apply:

Python
Скопировать код
# Создание столбца на основе нескольких условий
df['Статус клиента'] = df.apply(lambda row: 'VIP' if row['Возраст'] > 30 and row['Город'] == 'Москва' 
else 'Стандарт', axis=1)

Когда речь идет о производительности при работе с большими данными, метод с квадратными скобками обычно является одним из самых быстрых, особенно при использовании векторизированных операций без apply.

Способ 2: Метод assign() для создания новых столбцов

Метод assign() — мощный инструмент pandas для функционального программирования с DataFrame. Главное отличие от способа с квадратными скобками: assign() не изменяет исходный DataFrame, а возвращает новый с добавленными столбцами. Это делает его идеальным для создания цепочек преобразований данных. 🔗

Базовый синтаксис использования assign():

Python
Скопировать код
# Добавление одного столбца
df_new = df.assign(Рейтинг=[4\.5, 3.8, 4.9, 4.2])

# Добавление нескольких столбцов
df_new = df.assign(
Рейтинг=[4\.5, 3.8, 4.9, 4.2],
Активен=[True, False, True, True]
)

# Создание столбца на основе вычислений
df_new = df.assign(Старше_30=lambda x: x['Возраст'] > 30)

print(df_new)

Преимущества метода assign():

  • Не изменяет исходный DataFrame (иммутабельность)
  • Позволяет создавать элегантные цепочки трансформаций
  • Можно добавлять множество столбцов за один вызов
  • Поддерживает лямбда-функции для вычисления значений
  • Новые столбцы могут зависеть от других новых столбцов в том же вызове

Метод assign() особенно полезен в сценариях функционального программирования, где важно сохранение исходных данных без изменений:

Python
Скопировать код
# Цепочка трансформаций с assign()
result_df = (df
.assign(Год_рождения=lambda x: 2023 – x['Возраст'])
.assign(Поколение=lambda x: np.where(x['Год_рождения'] >= 2000, 'Z', 
np.where(x['Год_рождения'] >= 1980, 'Y', 'X')))
.assign(Полное_имя=lambda x: x['Имя'] + ' из ' + x['Город'])
)

Такой подход делает код более читаемым и понятным, особенно при сложных последовательностях трансформаций данных.

Характеристика Квадратные скобки Метод assign()
Изменение исходного DataFrame Да Нет
Добавление нескольких столбцов По одному Несколько за один вызов
Поддержка цепочек методов Ограничена Полная
Ссылка на новые столбцы Нет Да
Интуитивность для новичков Высокая Средняя
Производительность Очень высокая Высокая

При работе с большими данными метод assign() может быть немного медленнее, чем прямая индексация с квадратными скобками, из-за создания копий данных. Однако это различие обычно незначительно, если только вы не работаете с очень большими датасетами.

Метод assign() также позволяет ссылаться на столбцы, создаваемые в том же вызове, что делает его более гибким для сложных преобразований:

Python
Скопировать код
# Ссылка на столбцы, создаваемые в том же вызове assign()
df_new = df.assign(
Удвоенный_возраст=lambda x: x['Возраст'] * 2,
Утроенный_возраст=lambda x: x['Удвоенный_возраст'] * 1.5 # Ссылка на новый столбец
)

Способ 3: Изменение названий столбцов в pandas

Помимо добавления новых столбцов, часто возникает необходимость переименования существующих. Переименование столбцов может потребоваться для приведения названий к единому стандарту, для удобства работы или для соответствия требованиям определенных инструментов анализа. 🏷️

В pandas существует несколько способов изменения названий столбцов:

Python
Скопировать код
# Способ 1: Использование метода rename()
df_renamed = df.rename(columns={'Имя': 'Полное_имя', 'Город': 'Населенный_пункт'})

# Способ 2: Прямое присваивание списка новых имен
df.columns = ['Полное_имя', 'Лет', 'Населенный_пункт', 'Пол', 'Год_рождения']

# Способ 3: Использование метода set_axis
df_renamed = df.set_axis(['Полное_имя', 'Лет', 'Населенный_пункт', 'Пол', 'Год_рождения'], axis=1)

print(df_renamed)

Каждый из этих методов имеет свои особенности:

  • rename(): позволяет выборочно изменить имена только некоторых столбцов, сохраняя остальные без изменений
  • columns: требует указания всех имен столбцов, даже тех, которые не меняются
  • set_axis(): аналогичен прямому присваиванию, но возвращает новый DataFrame, не изменяя исходный

Метод rename() особенно полезен, когда вам нужно изменить только несколько имен из большого количества столбцов:

Python
Скопировать код
# Переименование с сохранением исходного DataFrame
df_renamed = df.rename(columns={'Имя': 'Полное_имя',

**Читайте также**
- [Переименование столбцов в pandas: 3 способа для чистых данных](/python/kak-izmenit-nazvanie-stolbca-v-pandas/)
- [Нейронные сети для начинающих Python-разработчиков: первые шаги](/python/obuchenie-nejronnyh-setej-na-python-shag-za-shagom/)
- [Большие данные в Python: инструменты обработки и аналитики](/python/luchshie-instrumenty-dlya-obrabotki-bolshih-dannyh-na-python/)
- [Ввод данных в Python: проверка, защита и обработка ошибок](/python/rabota-s-vvodom-dannyh-v-python-osnovy-i-primery/)
- [Обучение моделей машинного обучения в scikit-learn: пошаговое руководство](/python/obuchenie-modelej-s-pomoshyu-scikit-learn/)
- [Лучшие инструменты для анализа данных: сравнение 27 решений](/python/luchshie-instrumenty-dlya-analiza-dannyh/)
- [Pip в Python: установка и использование библиотек для разработки](/python/kak-ustanovit-i-ispolzovat-biblioteki-cherez-pip/)
- [PyTorch: ключевой фреймворк для нейронных сетей и ИИ-разработки](/python/chto-takoe-pytorch/)
- [Зарплаты Python-разработчиков: от джуниора до сеньора в России](/python/srednyaya-zarplata-python-razrabotchika-v-rossii/)
- [Автоматизация работы с Excel на Python: экономим время, силы](/python/rabota-s-excel-fajlami-na-python/)

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Какой метод pandas позволяет добавить новый столбец в DataFrame с вычисляемыми значениями из других столбцов?
1 / 5

Загрузка...