Как переименовать столбцы в Pandas DataFrame (с примерами)
Last updated
Last updated
Возможность переименовывать столбцы в вашем DataFrame Pandas — это очень распространённая задача. В частности, умение присваивать столбцам осмысленные названия помогает лучше передать суть ваших данных. Аналогично, вы могли получить данные от другого человека, и столбцы в них оказались неправильно помечены. Во всех этих случаях умение переименовывать столбцы вашего DataFrame оказывается полезным навыком.
В этом руководстве вы узнаете, как переименовывать столбцы в Pandas DataFrame. Вы научитесь использовать метод .rename()
из Pandas, а также другие полезные приёмы. Например, вы узнаете, как добавить префикс или суффикс ко всем названиям столбцов.
К концу этого урока вы научитесь:
Переименовывать один столбец или все столбцы в Pandas DataFrame с помощью метода .rename()
Использовать атрибут .columns
для переименования столбцов различными способами, такими как добавление префикса или суффикса, или приведение всех названий к нижнему регистру
Заменять или удалять определённый текст или символы из всех названий столбцов сразу
Использовать функции-мапперы для переименования столбцов Pandas DataFrame
Добавлять префиксы или суффиксы ко всем названиям столбцов
Чтобы переименовать столбцы в Pandas DataFrame, у вас есть два основных варианта: использовать метод rename()
или атрибут columns
. Метод .rename()
позволяет передать текущие названия и новые названия. Атрибут .columns
позволяет указать список новых названий для столбцов.
Рассмотрим подробнее основные методы переименования столбцов в Pandas DataFrame:
Метод Pandas .rename()
позволяет переименовывать метки DataFrame. В частности, вы можете передать отображение (mapping) для переименования названий столбцов. Это может быть либо функция-маппер, либо словарь с новыми названиями. Этот метод особенно удобен, когда вы хотите изменить название одного или нескольких столбцов.
Атрибут Pandas .columns
позволяет передать список значений, которые будут использоваться как новые названия столбцов. Это позволяет легко изменить все названия столбцов, применив к ним одно и то же преобразование. Этот метод предпочтителен, когда вы хотите переименовать все столбцы одинаковым образом, например, привести их к нижнему регистру или удалить пробелы.
Чтобы следовать материалу урока, давайте загрузим образец DataFrame Pandas. Скопируйте и вставьте приведённый ниже код в свой редактор. Если вы работаете со своим собственным набором данных — проблем нет! Результаты, конечно, будут отличаться.
Мы можем видеть, что у нас есть DataFrame с пятью различными столбцами. Некоторые из столбцов состоят из одного слова, тогда как другие содержат несколько слов, разделённых пробелами. Кроме того, все названия столбцов написаны с заглавной буквы (в стиле Title Case).
Давайте перейдём к рассмотрению того, как переименовывать столбцы Pandas, начав с изменения названия одного столбца.
Чтобы переименовать один столбец DataFrame в Pandas, мы можем воспользоваться методом .rename()
. Как следует из названия, этот метод используется для переименования меток в DataFrame. Давайте кратко посмотрим, как записывается этот метод:
Мы можем видеть, что функция принимает до семи аргументов. Некоторые из этих параметров относятся specifically к переименованию строк (меток индекса). Поскольку мы сосредоточены на переименовании столбцов, давайте рассмотрим только подмножество этих параметров.
Чтобы переименовать один столбец в Pandas, мы можем использовать либо параметр mapper=
, либо вспомогательный параметр columns=
. Поскольку столбцы находятся вдоль первой оси, если мы хотим использовать параметр mapper=
, нам нужно указать axis=1
. Однако, на мой взгляд, это немного сложнее, чем использование более удобного параметра columns=
.
Давайте посмотрим, как можно использовать параметр columns=
для переименования столбца Pandas по имени:
Мы можем видеть, что передав словарь сопоставления столбцов в параметр columns=
, нам удалось переименовать один столбец в DataFrame Pandas. Это эквивалентно записи:
df = df.rename(mapper={'Birth City': 'City'}, axis=1)
.
Однако этот способ не только понятнее, но и быстрее набирается!
Теперь предположим, что вы не знаете, как называется первый столбец, но хотите присвоить ему определённое имя. Атрибут df.columns
возвращает список всех названий столбцов в DataFrame. Благодаря этому мы можем передать отображение для первого столбца.
Например, если мы хотим изменить название первого столбца на 'id'
, мы можем написать следующее:
Мы можем видеть, что нам удалось переименовать первый столбец DataFrame, воспользовавшись атрибутом .columns
. Мы вернёмся к более активному использованию этого атрибута чуть позже. А сейчас сосредоточимся на том, как переименовать сразу несколько столбцов.
.rename()
Аналогично переименованию одного столбца в DataFrame, мы можем использовать метод .rename()
для переименования нескольких столбцов. Для этого достаточно передать словарь, содержащий несколько пар ключ-значение.
Давайте посмотрим, как переименовать несколько столбцов в DataFrame Pandas с помощью метода .rename()
:
Мы можем видеть, что нам удалось переименовать сразу несколько столбцов за один раз. На этом этапе стоит отметить, что если указанного столбца не существует, Pandas по умолчанию не вызовет ошибку — хотя вы можете изменить это поведение, как вы узнаете позже.
Теперь давайте рассмотрим способ переименования нескольких столбцов с использованием генератора списка (list comprehension).
В этом разделе вы узнаете, как использовать генераторы списков для переименования столбцов в Pandas. Это может быть полезно, когда вы хотите переименовать столбцы по одному и тому же шаблону. Например, можно удалить пробелы или привести все названия к нижнему регистру.
Например, если в ваших заголовках столбцов есть пробелы, становится невозможно использовать точечную нотацию для выбора столбцов. Кроме того, поскольку выборка данных чувствительна к регистру, наличие разных стилей написания усложняет работу со столбцами.
Давайте рассмотрим пример, в котором мы удалим все пробелы из названий столбцов:
Разберём, что происходит в приведённом выше блоке кода:
Мы использовали генератор списка (list comprehension), чтобы пройтись по каждому названию столбца в нашем DataFrame.
Для каждой метки столбца мы применили строковой метод .replace()
, чтобы заменить все пробелы на символ подчёркивания _
.
Также мы применили метод .lower()
для перевода всей строки в нижний регистр.
Важно отметить, что мы не присваиваем полученный список обратно в DataFrame как новую переменную, а напрямую назначаем его атрибуту df.columns
. Поскольку этот атрибут отвечает за хранение названий столбцов, мы можем передать ему список новых имён, и они заменят текущие заголовки.
Метод .rename()
из Pandas также позволяет передавать в параметр mapper=
не только словарь, но и функцию. Это означает, что вы можете применить одну и ту же трансформацию ко всем названиям столбцов.
Например, если мы просто хотим привести все названия столбцов к нижнему регистру, это можно сделать с помощью функции-маппера, переданной прямо в метод .rename()
:
Мы используем axis='columns'
, чтобы указать, что хотим применить преобразование к столбцам. Аналогично, можно было бы написать: axis=1
. Мы можем видеть, что преобразование было применено ко всем столбцам.
Имейте в виду, что поскольку мы используем строковой метод, этот подход будет работать только в том случае, если все названия ваших столбцов — строки! Если какие-либо столбцы содержат, например, числа, этот метод вызовет ошибку TypeError
.
Вы также можете использовать собственные лямбда-функции, чтобы передавать более сложные преобразования. Это работает так же, как и использование простой встроенной функции-маппера, но позволяет задавать собственные правила для изменения названий столбцов.
Рассмотрим пример. Если мы хотим использовать лямбда-функцию для переименования всех столбцов, заменяя пробелы на подчёркивания и приводя всё к нижнему регистру, мы могли бы написать:
Мы используем axis=1
, чтобы указать, что хотим применить это преобразование к столбцам. Аналогично, можно было бы написать: axis='columns'
.
Вы могли заметить, что во всех наших примерах с использованием метода .rename()
мы переназначали DataFrame самому себе. Мы можем избежать этого, используя булев параметр inplace=
в нашем вызове метода. Давайте проиллюстрируем это на предыдущем примере:
В следующем разделе вы узнаете, как вызывать ошибки при использовании метода pd.rename()
.
По умолчанию метод .rename()
не вызывает ошибок, если вы пытаетесь переименовать несуществующий столбец. Это может привести к неожиданным проблемам, особенно если вы предполагаете, что столбец был переименован, хотя на самом деле это не произошло.
Давайте посмотрим на это в действии, попробовав переименовать столбец, которого нет в DataFrame:
Мы можем видеть, что используя параметр errors=
, мы можем заставить Python вызывать ошибку, если метка столбца не существует.
Метод .rename()
также включает аргумент, позволяющий указать, какой уровень многоуровневого индекса (multi-index) вы хотите переименовать. Часто многоуровневые столбцы встречаются при работе со сводными таблицами (pivot tables). Давайте рассмотрим пример. Предположим, мы создали сводную таблицу в Pandas и хотим переименовать только столбец на первом уровне.
В приведённом выше примере мы создали многоуровневый DataFrame Pandas. Первый уровень (уровень 0) содержит значения из нашего столбца Gender
. Указав, что мы хотим использовать только уровень 0, мы можем применить переименование только к меткам столбцов этого уровня. Чтобы узнать больше о сводных таблицах в Pandas, ознакомьтесь с моим подробным руководством по [этой ссылке].
Мы также можем добавить префикс или суффикс ко всем столбцам DataFrame, используя специальные методы:
.add_prefix()
— добавляет указанный префикс к каждому названию столбца,
.add_suffix()
— добавляет указанный суффикс к каждому названию столбца.
Давайте посмотрим, как можно использовать эти методы для добавления префикса ко всем столбцам нашего DataFrame:
Добавление суффикса выполняется точно так же, только вместо .add_prefix()
используется метод .add_suffix()
.
Аналогично, если мы хотим добавить суффикс только к определённым столбцам, мы можем использовать генератор списка (list comprehension). Например, если мы хотим добавить суффикс к столбцам, в названии которых содержится слово age
, мы можем использовать следующий код:
В приведённом выше примере мы использовали генератор списка (list comprehension), чтобы применить преобразование условно. Это позволило нам проверять выполнение определённого условия: если условие выполняется (в данном случае, если в названии столбца содержится слово 'Age'
), к нему добавляется суффикс. В противном случае название столбца остаётся без изменений.
В этой статье вы узнали о различных способах переименования столбцов в DataFrame Pandas. Вы изучили два основных метода:
Использование метода .rename()
для переименования одного или нескольких столбцов,
Использование атрибута .columns
для массового изменения названий.
Затем вы научились переименовывать отдельные столбцы — как по имени, так и по позиции. Далее вы узнали, как переименовать сразу несколько столбцов с помощью метода .rename()
и генераторов списков. Также были рассмотрены способы использования функций-мапперов, включая встроенные и пользовательские лямбда-функции.
Наконец, вы узнали, как переименовывать столбцы на месте (inplace), как вызывать ошибки при попытке переименовать несуществующий столбец, а также как работать с уровнями многоуровневых (multi-index) DataFrame.
Чтобы узнать больше по смежным темам, ознакомьтесь со следующими материалами:
Pandas Rename Index: Как переименовать индекс DataFrame
Pandas Replace: Замена значений в DataFrame
Pandas: Замена NaN на нули