Как переименовать столбцы в Pandas DataFrame (с примерами)
Возможность переименовывать столбцы в вашем DataFrame Pandas — это очень распространённая задача. В частности, умение присваивать столбцам осмысленные названия помогает лучше передать суть ваших данных. Аналогично, вы могли получить данные от другого человека, и столбцы в них оказались неправильно помечены. Во всех этих случаях умение переименовывать столбцы вашего DataFrame оказывается полезным навыком.
В этом руководстве вы узнаете, как переименовывать столбцы в Pandas DataFrame. Вы научитесь использовать метод .rename()
из Pandas, а также другие полезные приёмы. Например, вы узнаете, как добавить префикс или суффикс ко всем названиям столбцов.
К концу этого урока вы научитесь:
Переименовывать один столбец или все столбцы в Pandas DataFrame с помощью метода
.rename()
Использовать атрибут
.columns
для переименования столбцов различными способами, такими как добавление префикса или суффикса, или приведение всех названий к нижнему региструЗаменять или удалять определённый текст или символы из всех названий столбцов сразу
Использовать функции-мапперы для переименования столбцов Pandas DataFrame
Добавлять префиксы или суффиксы ко всем названиям столбцов
Оглавление
Как можно переименовать столбцы Pandas DataFrame?
Чтобы переименовать столбцы в Pandas DataFrame, у вас есть два основных варианта: использовать метод rename()
или атрибут columns
. Метод .rename()
позволяет передать текущие названия и новые названия. Атрибут .columns
позволяет указать список новых названий для столбцов.
Рассмотрим подробнее основные методы переименования столбцов в Pandas DataFrame:
Метод Pandas .rename()
позволяет переименовывать метки DataFrame. В частности, вы можете передать отображение (mapping) для переименования названий столбцов. Это может быть либо функция-маппер, либо словарь с новыми названиями. Этот метод особенно удобен, когда вы хотите изменить название одного или нескольких столбцов.
Атрибут Pandas .columns
позволяет передать список значений, которые будут использоваться как новые названия столбцов. Это позволяет легко изменить все названия столбцов, применив к ним одно и то же преобразование. Этот метод предпочтителен, когда вы хотите переименовать все столбцы одинаковым образом, например, привести их к нижнему регистру или удалить пробелы.
Загрузка примера DataFrame
Чтобы следовать материалу урока, давайте загрузим образец DataFrame Pandas. Скопируйте и вставьте приведённый ниже код в свой редактор. Если вы работаете со своим собственным набором данных — проблем нет! Результаты, конечно, будут отличаться.
# Загрузка примера Pandas DataFrame
import pandas as pd
df = pd.DataFrame.from_dict({
'Name': ['Jane', 'Melissa', 'John', 'Matt'],
'Age': [23, 45, 35, 64],
'Age Group': ['18-35', '35-50', '35-50', '65+'],
'Birth City': ['London', 'Paris', 'Toronto', 'Atlanta'],
'Gender': ['Female', 'Female', 'Male', 'Male']})
print(df)
# Возвращает:
# Name Age Age Group Birth City Gender
# 0 Jane 23 18-35 London Female
# 1 Melissa 45 35-50 Paris Female
# 2 John 35 35-50 Toronto Male
# 3 Matt 64 65+ Atlanta Male
Мы можем видеть, что у нас есть DataFrame с пятью различными столбцами. Некоторые из столбцов состоят из одного слова, тогда как другие содержат несколько слов, разделённых пробелами. Кроме того, все названия столбцов написаны с заглавной буквы (в стиле Title Case).
Давайте перейдём к рассмотрению того, как переименовывать столбцы Pandas, начав с изменения названия одного столбца.
Как переименовать один столбец DataFrame Pandas
Чтобы переименовать один столбец DataFrame в Pandas, мы можем воспользоваться методом .rename()
. Как следует из названия, этот метод используется для переименования меток в DataFrame. Давайте кратко посмотрим, как записывается этот метод:
# Понимание метода .rename() в Pandas
import pandas as pd
# Пример использования (DataFrame 'df' предполагается уже определенным)
# mapper: dict или function, необязательный. Используется для изменения меток индекса или столбцов.
# index: dict или function, необязательный. Альтернатива mapper для изменения меток индекса.
# columns: dict или function, необязательный. Альтернатива mapper для изменения названий столбцов.
# axis: {0 или 'index', 1 или 'columns'}, по умолчанию 0. Ось для переименования.
# copy: bool, по умолчанию True. Копировать базовые данные.
# inplace: bool, по умолчанию False. Изменять DataFrame на месте.
# level: int или name, необязательный. Для MultiIndex, уровень, метки которого нужно изменить.
# errors: {'ignore', 'raise'}, по умолчанию 'ignore'. Если 'raise', вызывает ошибку при недопустимых метках.
df.rename(mapper=None, *, index=None, columns=None, axis=None, copy=None, inplace=False, level=None, errors='ignore')
Мы можем видеть, что функция принимает до семи аргументов. Некоторые из этих параметров относятся specifically к переименованию строк (меток индекса). Поскольку мы сосредоточены на переименовании столбцов, давайте рассмотрим только подмножество этих параметров.
Чтобы переименовать один столбец в Pandas, мы можем использовать либо параметр mapper=
, либо вспомогательный параметр columns=
. Поскольку столбцы находятся вдоль первой оси, если мы хотим использовать параметр mapper=
, нам нужно указать axis=1
. Однако, на мой взгляд, это немного сложнее, чем использование более удобного параметра columns=
.
Давайте посмотрим, как можно использовать параметр columns=
для переименования столбца Pandas по имени:
# Переименование одного столбца в Pandas DataFrame
import pandas as pd
df = pd.DataFrame.from_dict({
'Name': ['Jane', 'Melissa', 'John', 'Matt'],
'Age': [23, 45, 35, 64],
'Age Group': ['18-35', '35-50', '35-50', '65+'],
'Birth City': ['London', 'Paris', 'Toronto', 'Atlanta'],
'Gender': ['Female', 'Female', 'Male', 'Male']})
# Переименование столбца 'Birth City' в 'City'
df = df.rename(columns={'Birth City': 'City'})
print(df)
# Возвращает:
# Name Age Age Group City Gender
# 0 Jane 23 18-35 London Female
# 1 Melissa 45 35-50 Paris Female
# 2 John 35 35-50 Toronto Male
# 3 Matt 64 65+ Atlanta Male
Мы можем видеть, что передав словарь сопоставления столбцов в параметр columns=
, нам удалось переименовать один столбец в DataFrame Pandas. Это эквивалентно записи:
df = df.rename(mapper={'Birth City': 'City'}, axis=1)
.
Однако этот способ не только понятнее, но и быстрее набирается!
Переименование одного столбца DataFrame Pandas по позиции
Теперь предположим, что вы не знаете, как называется первый столбец, но хотите присвоить ему определённое имя. Атрибут df.columns
возвращает список всех названий столбцов в DataFrame. Благодаря этому мы можем передать отображение для первого столбца.
Например, если мы хотим изменить название первого столбца на 'id'
, мы можем написать следующее:
import pandas as pd
df = pd.DataFrame.from_dict({
'Name': ['Jane', 'Melissa', 'John', 'Matt'],
'Age': [23, 45, 35, 64],
'Age Group': ['18-35', '35-50', '35-50', '65+'],
'Birth City': ['London', 'Paris', 'Toronto', 'Atlanta'],
'Gender': ['Female', 'Female', 'Male', 'Male']})
# Переименование первого столбца (по индексу 0) в 'id'
df = df.rename(columns={df.columns[0]: 'id'})
print(df)
# Возвращает:
# id Age Age Group Birth City Gender
# 0 Jane 23 18-35 London Female
# 1 Melissa 45 35-50 Paris Female
# 2 John 35 35-50 Toronto Male
# 3 Matt 64 65+ Atlanta Male
Мы можем видеть, что нам удалось переименовать первый столбец DataFrame, воспользовавшись атрибутом .columns
. Мы вернёмся к более активному использованию этого атрибута чуть позже. А сейчас сосредоточимся на том, как переименовать сразу несколько столбцов.
Как переименовать несколько столбцов Pandas с помощью .rename()
.rename()
Аналогично переименованию одного столбца в DataFrame, мы можем использовать метод .rename()
для переименования нескольких столбцов. Для этого достаточно передать словарь, содержащий несколько пар ключ-значение.
Давайте посмотрим, как переименовать несколько столбцов в DataFrame Pandas с помощью метода .rename()
:
# Переименование нескольких столбцов с помощью .rename()
import pandas as pd
df = pd.DataFrame.from_dict({
'Name': ['Jane', 'Melissa', 'John', 'Matt'],
'Age': [23, 45, 35, 64],
'Age Group': ['18-35', '35-50', '35-50', '65+'],
'Birth City': ['London', 'Paris', 'Toronto', 'Atlanta'],
'Gender': ['Female', 'Female', 'Male', 'Male']})
# Переименование столбцов 'Age Group' в 'Group' и 'Birth City' в 'City'
df = df.rename(columns={'Age Group': 'Group', 'Birth City': 'City'})
print(df)
# Возвращает:
# Name Age Group City Gender
# 0 Jane 23 18-35 London Female
# 1 Melissa 45 35-50 Paris Female
# 2 John 35 35-50 Toronto Male
# 3 Matt 64 65+ Atlanta Male
Мы можем видеть, что нам удалось переименовать сразу несколько столбцов за один раз. На этом этапе стоит отметить, что если указанного столбца не существует, Pandas по умолчанию не вызовет ошибку — хотя вы можете изменить это поведение, как вы узнаете позже.
Теперь давайте рассмотрим способ переименования нескольких столбцов с использованием генератора списка (list comprehension).
Как использовать генераторы списков (list comprehensions) для переименования столбцов DataFrame в Pandas
В этом разделе вы узнаете, как использовать генераторы списков для переименования столбцов в Pandas. Это может быть полезно, когда вы хотите переименовать столбцы по одному и тому же шаблону. Например, можно удалить пробелы или привести все названия к нижнему регистру.
Например, если в ваших заголовках столбцов есть пробелы, становится невозможно использовать точечную нотацию для выбора столбцов. Кроме того, поскольку выборка данных чувствительна к регистру, наличие разных стилей написания усложняет работу со столбцами.
Давайте рассмотрим пример, в котором мы удалим все пробелы из названий столбцов:
# Переименование столбцов с использованием спискового включения
import pandas as pd
df = pd.DataFrame.from_dict({
'Name': ['Jane', 'Melissa', 'John', 'Matt'],
'Age': [23, 45, 35, 64],
'Age Group': ['18-35', '35-50', '35-50', '65+'],
'Birth City': ['London', 'Paris', 'Toronto', 'Atlanta'],
'Gender': ['Female', 'Female', 'Male', 'Male']})
# Замена пробелов на подчеркивания и приведение названий столбцов к нижнему регистру
df.columns = [col.replace(' ', '_').lower() for col in df.columns]
print(df)
# Возвращает:
# name age age_group birth_city gender
# 0 Jane 23 18-35 London Female
# 1 Melissa 45 35-50 Paris Female
# 2 John 35 35-50 Toronto Male
# 3 Matt 64 65+ Atlanta Male
Разберём, что происходит в приведённом выше блоке кода:
Мы использовали генератор списка (list comprehension), чтобы пройтись по каждому названию столбца в нашем DataFrame.
Для каждой метки столбца мы применили строковой метод
.replace()
, чтобы заменить все пробелы на символ подчёркивания_
.Также мы применили метод
.lower()
для перевода всей строки в нижний регистр.
Важно отметить, что мы не присваиваем полученный список обратно в DataFrame как новую переменную, а напрямую назначаем его атрибуту df.columns
. Поскольку этот атрибут отвечает за хранение названий столбцов, мы можем передать ему список новых имён, и они заменят текущие заголовки.
Использование функции-маппера для переименования столбцов Pandas
Метод .rename()
из Pandas также позволяет передавать в параметр mapper=
не только словарь, но и функцию. Это означает, что вы можете применить одну и ту же трансформацию ко всем названиям столбцов.
Например, если мы просто хотим привести все названия столбцов к нижнему регистру, это можно сделать с помощью функции-маппера, переданной прямо в метод .rename()
:
# Переименование столбцов DataFrame с использованием функции-отображения
import pandas as pd
df = pd.DataFrame.from_dict({
'Name': ['Jane', 'Melissa', 'John', 'Matt'],
'Age': [23, 45, 35, 64],
'Age Group': ['18-35', '35-50', '35-50', '65+'],
'Birth City': ['London', 'Paris', 'Toronto', 'Atlanta'],
'Gender': ['Female', 'Female', 'Male', 'Male']})
# Применение функции str.lower к названиям столбцов
df = df.rename(mapper=str.lower, axis='columns')
print(df)
# Возвращает:
# name age age_group birth_city gender
# 0 Jane 23 18-35 London Female
# 1 Melissa 45 35-50 Paris Female
# 2 John 35 35-50 Toronto Male
# 3 Matt 64 65+ Atlanta Male
Мы используем axis='columns'
, чтобы указать, что хотим применить преобразование к столбцам. Аналогично, можно было бы написать: axis=1
. Мы можем видеть, что преобразование было применено ко всем столбцам.
Имейте в виду, что поскольку мы используем строковой метод, этот подход будет работать только в том случае, если все названия ваших столбцов — строки! Если какие-либо столбцы содержат, например, числа, этот метод вызовет ошибку TypeError
.
Использование лямбда-функции для переименования столбцов Pandas
Вы также можете использовать собственные лямбда-функции, чтобы передавать более сложные преобразования. Это работает так же, как и использование простой встроенной функции-маппера, но позволяет задавать собственные правила для изменения названий столбцов.
Рассмотрим пример. Если мы хотим использовать лямбда-функцию для переименования всех столбцов, заменяя пробелы на подчёркивания и приводя всё к нижнему регистру, мы могли бы написать:
# Переименование столбцов с использованием лямбда-функции
import pandas as pd
df = pd.DataFrame.from_dict({
'Name': ['Jane', 'Melissa', 'John', 'Matt'],
'Age': [23, 45, 35, 64],
'Age Group': ['18-35', '35-50', '35-50', '65+'],
'Birth City': ['London', 'Paris', 'Toronto', 'Atlanta'],
'Gender': ['Female', 'Female', 'Male', 'Male']})
# Применение лямбда-функции для замены пробелов на подчеркивания и приведения к нижнему регистру
df = df.rename(mapper=lambda x: x.replace(' ', '_').lower(), axis=1)
print(df)
# Возвращает:
# name age age_group birth_city gender
# 0 Jane 23 18-35 London Female
# 1 Melissa 45 35-50 Paris Female
# 2 John 35 35-50 Toronto Male
# 3 Matt 64 65+ Atlanta Male
Мы используем axis=1
, чтобы указать, что хотим применить это преобразование к столбцам. Аналогично, можно было бы написать: axis='columns'
.
Переименование столбцов DataFrame Pandas на месте
Вы могли заметить, что во всех наших примерах с использованием метода .rename()
мы переназначали DataFrame самому себе. Мы можем избежать этого, используя булев параметр inplace=
в нашем вызове метода. Давайте проиллюстрируем это на предыдущем примере:
# Переименование столбцов DataFrame на месте
import pandas as pd
df = pd.DataFrame.from_dict({
'Name': ['Jane', 'Melissa', 'John', 'Matt'],
'Age': [23, 45, 35, 64],
'Age Group': ['18-35', '35-50', '35-50', '65+'],
'Birth City': ['London', 'Paris', 'Toronto', 'Atlanta'],
'Gender': ['Female', 'Female', 'Male', 'Male']})
# Переименование столбцов с применением лямбда-функции и изменением DataFrame на месте
df.rename(mapper=lambda x: x.replace(' ', '_').lower(), axis=1, inplace=True)
print(df)
# Возвращает:
# name age age_group birth_city gender
# 0 Jane 23 18-35 London Female
# 1 Melissa 45 35-50 Paris Female
# 2 John 35 35-50 Toronto Male
# 3 Matt 64 65+ Atlanta Male
В следующем разделе вы узнаете, как вызывать ошибки при использовании метода pd.rename()
.
Вызов ошибок при переименовании столбцов Pandas
По умолчанию метод .rename()
не вызывает ошибок, если вы пытаетесь переименовать несуществующий столбец. Это может привести к неожиданным проблемам, особенно если вы предполагаете, что столбец был переименован, хотя на самом деле это не произошло.
Давайте посмотрим на это в действии, попробовав переименовать столбец, которого нет в DataFrame:
# Вызов ошибки при переименовании столбцов
import pandas as pd
df = pd.DataFrame.from_dict({
'Name': ['Jane', 'Melissa', 'John', 'Matt'],
'Age': [23, 45, 35, 64],
'Age Group': ['18-35', '35-50', '35-50', '65+'],
'Birth City': ['London', 'Paris', 'Toronto', 'Atlanta'],
'Gender': ['Female', 'Female', 'Male', 'Male']})
# Попытка переименовать несуществующий столбец с установкой errors='raise'
try:
df = df.rename(columns={'some silly name': 'column1'}, errors='raise')
print(df)
except KeyError as e:
print(f"Возникла ошибка: {e}")
# Ожидаемый вывод:
# KeyError: "['some silly name'] not found in axis"
Мы можем видеть, что используя параметр errors=
, мы можем заставить Python вызывать ошибку, если метка столбца не существует.
Переименование многоуровневых (multi-index) столбцов Pandas
Метод .rename()
также включает аргумент, позволяющий указать, какой уровень многоуровневого индекса (multi-index) вы хотите переименовать. Часто многоуровневые столбцы встречаются при работе со сводными таблицами (pivot tables). Давайте рассмотрим пример. Предположим, мы создали сводную таблицу в Pandas и хотим переименовать только столбец на первом уровне.
import pandas as pd
df = pd.DataFrame.from_dict({
'Name': ['Jane', 'Melissa', 'John', 'Matt'],
'Age': [23, 45, 35, 64],
'Age Group': ['18-35', '35-50', '35-50', '65+'],
'Birth City': ['London', 'Paris', 'Toronto', 'Atlanta'],
'Gender': ['Female', 'Female', 'Male', 'Male']})
# Создание сводной таблицы
pivot = pd.pivot_table(data=df, columns=['Gender', 'Age Group'], values='Age', aggfunc='count')
# Переименование столбца 'Male' в 'male' на уровне 0 (уровень 'Gender')
pivot = pivot.rename(columns={'Male': 'male'}, level=0)
print(pivot)
# Возвращает:
# Gender Female male
# Age Group 18-35 35-50 35-50 65+
# Age 1 1 1 1
В приведённом выше примере мы создали многоуровневый DataFrame Pandas. Первый уровень (уровень 0) содержит значения из нашего столбца Gender
. Указав, что мы хотим использовать только уровень 0, мы можем применить переименование только к меткам столбцов этого уровня. Чтобы узнать больше о сводных таблицах в Pandas, ознакомьтесь с моим подробным руководством по [этой ссылке].
Добавление префикса или суффикса ко всем столбцам DataFrame Pandas
Мы также можем добавить префикс или суффикс ко всем столбцам DataFrame, используя специальные методы:
.add_prefix()
— добавляет указанный префикс к каждому названию столбца,.add_suffix()
— добавляет указанный суффикс к каждому названию столбца.
Давайте посмотрим, как можно использовать эти методы для добавления префикса ко всем столбцам нашего DataFrame:
# Добавление префикса к названиям столбцов DataFrame
import pandas as pd
df = pd.DataFrame.from_dict({
'Name': ['Jane', 'Melissa', 'John', 'Matt'],
'Age': [23, 45, 35, 64],
'Age Group': ['18-35', '35-50', '35-50', '65+'],
'Birth City': ['London', 'Paris', 'Toronto', 'Atlanta'],
'Gender': ['Female', 'Female', 'Male', 'Male']})
# Добавление префикса 'prefix_' ко всем названиям столбцов
df = df.add_prefix('prefix_')
print(df)
# Возвращает:
# prefix_Name prefix_Age prefix_Age Group prefix_Birth City prefix_Gender
# 0 Jane 23 18-35 London Female
# 1 Melissa 45 35-50 Paris Female
# 2 John 35 35-50 Toronto Male
# 3 Matt 64 65+ Atlanta Male
Добавление суффикса выполняется точно так же, только вместо .add_prefix()
используется метод .add_suffix()
.
Аналогично, если мы хотим добавить суффикс только к определённым столбцам, мы можем использовать генератор списка (list comprehension). Например, если мы хотим добавить суффикс к столбцам, в названии которых содержится слово age
, мы можем использовать следующий код:
# Добавление суффикса по условию
import pandas as pd
df = pd.DataFrame.from_dict({
'Name': ['Jane', 'Melissa', 'John', 'Matt'],
'Age': [23, 45, 35, 64],
'Age Group': ['18-35', '35-50', '35-50', '65+'],
'Birth City': ['London', 'Paris', 'Toronto', 'Atlanta'],
'Gender': ['Female', 'Female', 'Male', 'Male']})
# Добавление суффикса '_suffix' к названиям столбцов, содержащих 'Age'
df.columns = [col+'_suffix' if 'Age' in col else col for col in df.columns]
print(df)
# Возвращает:
# Name Age_suffix Age Group_suffix Birth City Gender
# 0 Jane 23 18-35 London Female
# 1 Melissa 45 35-50 Paris Female
# 2 John 35 35-50 Toronto Male
# 3 Matt 64 65+ Atlanta Male
В приведённом выше примере мы использовали генератор списка (list comprehension), чтобы применить преобразование условно. Это позволило нам проверять выполнение определённого условия: если условие выполняется (в данном случае, если в названии столбца содержится слово 'Age'
), к нему добавляется суффикс. В противном случае название столбца остаётся без изменений.
Заключение
В этой статье вы узнали о различных способах переименования столбцов в DataFrame Pandas. Вы изучили два основных метода:
Использование метода
.rename()
для переименования одного или нескольких столбцов,Использование атрибута
.columns
для массового изменения названий.
Затем вы научились переименовывать отдельные столбцы — как по имени, так и по позиции. Далее вы узнали, как переименовать сразу несколько столбцов с помощью метода .rename()
и генераторов списков. Также были рассмотрены способы использования функций-мапперов, включая встроенные и пользовательские лямбда-функции.
Наконец, вы узнали, как переименовывать столбцы на месте (inplace), как вызывать ошибки при попытке переименовать несуществующий столбец, а также как работать с уровнями многоуровневых (multi-index) DataFrame.
Дополнительные ресурсы
Чтобы узнать больше по смежным темам, ознакомьтесь со следующими материалами:
Pandas Rename Index: Как переименовать индекс DataFrame
Pandas Replace: Замена значений в DataFrame
Pandas: Замена NaN на нули
Last updated