Как переименовывать столбцы в Pandas: практика с DataFrames

Вы узнаете, как переименовывать метки столбцов в Pandas. Это очень распространено, когда вы работаете со структурами данных, такими как DataFrames.

Как переименовать столбцы в Pandas DataFrame?

Функция переименования Pandas DataFrame позволяет переименовывать метки столбцов в Dataframe, используя словарь, который определяет текущие и новые значения меток. Существует несколько способов переименовать столбцы с помощью функции переименования (например, с помощью словарей, обычных функций или лямбда-выражений).

Мы рассмотрим несколько примеров, которые покажут, как переименовывать столбцы Pandas DataFrame. К концу этого урока вам это станет совершенно ясно.

Давайте начнем!

Переименовать столбец в Pandas DataFrame

Начнем с создания примера Python dataframe, который содержит страны и их столицы. Для этого мы можем использовать словарь Python после импорта модуля pandas:

import pandas as pd

df = pd.DataFrame({"Countries": ["Italy","United Kingdom", "Germany", "Greece"], "Capitals": ["Rome","London","Berlin","Athens"]})
print(df)

Вот созданный нами фрейм данных:

        Countries Capitals 0 Italy Rome 1 United Kingdom London 2 Germany Berlin 3 Greece Athens

Кадр данных также можно создать из формата CSV с помощью функции read_csv.

Чтобы переименовать столбцы в Pandas dataframe, мы можем использовать функцию rename и передать ей словарь. Словарь содержит текущие имена столбцов в качестве ключей и новые имена столбцов в качестве значений.

df.rename(columns={"Countries":"Country", "Capitals":"Capital"})

После выполнения этой команды мы получим следующее:

          Country Capital
0           Italy    Rome
1  United Kingdom  London
2         Germany  Berlin
3          Greece  Athens

Но затем, если мы выведем значение переменной df, мы увидим исходные столбцы…

Почему?

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

new_df = df.rename(columns={"Countries":"Country", "Capitals":"Capital"})
print(new_df)

[output]
          Country Capital
0           Italy    Rome
1  United Kingdom  London
2         Germany  Berlin
3          Greece  Athens 

Мы видели, как обновлять столбцы по имени, давайте посмотрим, как вывести только имена столбцов вместо полного кадра данных. Мы можем использовать функцию head, которая возвращает первые n строк кадра данных:

print(new_df.head(1))

[output]
  Countries Capitals
0     Italy     Rome

Как вы можете видеть, функция head выводит заголовок столбца (содержащий метки столбцов) и первую строку фрейма данных.

Переименовать столбец DataFrame на месте

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

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

Чтобы обновить столбцы DataFrame на месте с помощью функции переименования Pandas, нам необходимо установить аргумент inplace в значение True.

df.rename(columns={"Countries":"Country", "Capitals":"Capital"}, inplace=True)
print(df)

[output]
          Country Capital 0 Italy Rome 1 United Kingdom London 2 Germany Berlin 3 Greece Athens

Параметр inplace — это логическое значение, значение по умолчанию которого — False.

Кроме того, если inplace имеет значение True, функция rename возвращает None:

>>> print(df.rename(columns={"Countries":"Country", "Capitals":"Capital"}, inplace=True))
None

Итак, теперь вы знаете два способа обновления меток столбцов dataframe.

Переименовать один столбец в Pandas DataFrame

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

Давайте посмотрим, как…

df.rename(columns={"Country":"COUNTRY"}, inplace=True)
print(df)

[output]
          COUNTRY Capital 0 Italy Rome 1 United Kingdom London 2 Germany Berlin 3 Greece Athens

Мы обновили имя первого столбца, просто включив только имя первого столбца в словарь, переданный функции переименования.

Аналогичным образом мы можем обновить только второй столбец нашего фрейма данных.

А теперь…

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

df.rename(columns={"Population":"POPULATION"}, inplace=True)
print(df)

Функция rename обновляет имена столбцов на основе переданного ей словаря только в том случае, если в фрейме данных существует определенное имя столбца, в противном случае она не имеет никакого эффекта (если параметр ошибок не установлен на «raise»).

В этом сценарии давайте посмотрим, что произойдет, если мы передадим дополнительный параметр с именем errors и установим его значение на «raise»:

df.rename(columns={"Population":"POPULATION"}, inplace=True, errors="raise")

Pandas вызывает следующее исключение KeyError, чтобы сообщить нам об отсутствии столбца с названием «Population»:

KeyError: "['Population'] not found in axis"

Значение по умолчанию для параметра ошибок — «игнорировать».

Поэтому мы не увидели никаких ошибок, когда параметр ошибок отсутствовал в нашем выражении.

Переименовать столбец в Pandas по позиции

Можно ли переименовать столбец в таблице данных на основе его индекса?

Да, вот как…

Сначала мы вводим атрибут columns, который возвращает имена столбцов DataFrame.

print(df.columns)

[output]
Index(['COUNTRY', 'Capital'], dtype='object')

Мы можем получить доступ к переменной, возвращаемой атрибутом columns, как к списку и использовать ее для переименования определенного столбца.

Например, чтобы переименовать последний столбец, мы можем использовать:

df.rename(columns={ df.columns[-1]: "CAPITAL" }, inplace = True)
print(df)

[output]
          COUNTRY CAPITAL 0 Italy Rome 1 United Kingdom London 2 Germany Berlin 3 Greece Athens

Помните, что вы можете получить доступ к последнему элементу списка, используя индекс -1.

Переименуйте столбцы DataFrame с помощью списка

Аналогично можно также присвоить новые значения столбцов атрибуту .columns объекта DataFrame:

df.columns = ['CoUnTrIeS','CaPiTaLs']
print(df)

[output]
        CoUnTrIeS CaPiTaLs 0 Italy Rome 1 United Kingdom London 2 Germany Berlin 3 Greece Athens

Имейте в виду, что имена столбцов будут заменены в порядке элементов в предоставленном списке.

Обычно я предпочитаю всегда использовать один и тот же способ переименования столбцов для согласованности. Мой предпочтительный способ — передать словарь в функцию переименования.

Переименование столбца в Pandas с помощью функции

Распространенным сценарием является необходимость переименовать столбцы в DataFrame, сделав их строчными или заглавными.

Для этого мы можем использовать стандартные функции Python вместе с функцией переименования фрейма данных.

df.rename(columns=str.lower, inplace=True)
print(df)

[output]
        countries capitals 0 Italy Rome 1 United Kingdom London 2 Germany Berlin 3 Greece Athens

Например, здесь мы использовали метод строки lower() для преобразования заголовков столбцов в строки нижнего регистра.

Какие еще методы работы со строками вы могли бы использовать?

Как применить лямбда-выражение к функции переименования DataFrame

В предыдущем разделе мы увидели, как применить функцию к столбцам таблицы данных.

Учитывая, что лямбда-выражения являются функциями (точнее, анонимными функциями), мы также можем применять их для изменения значений столбцов.

Вот как…

df.rename(columns=lambda x: x[:2], inplace=True)
print(df)

[output]
               co      ca 0 Italy Rome 1 United Kingdom London 2 Germany Berlin 3 Greece Athens

Как видите, мы используем следующую лямбда-функцию:

lambda x: x[:2]

…чтобы установить значение имен столбцов равным их первым двум символам.

Переименование индекса для Pandas DataFrame

Мы использовали функцию rename для переименования столбцов в DataFrame. То же самое можно сделать и для индекса.

Например, начнем со следующего фрейма данных:

        Countries Capitals 0 Italy Rome 1 United Kingdom London 2 Germany Berlin 3 Greece Athens

Я хочу заменить 0,1,2,3 на Нация 0, Нация 1 и т. д.

С помощью следующего вызова функции замены я могу переименовать индекс:

df.rename(index={0:"Nation 0", 1: "Nation 1", 2: "Nation 2", 3: "Nation 3"}, inplace=True)
print(df)

[output]
               Countries Capitals Nation 0 Italy Rome Nation 1 United Kingdom London Nation 2 Germany Berlin Nation 3 Greece Athens

Чтобы обновить индекс DataFrame, передайте словарь параметру index функции rename. Ключи словаря представляют текущий индекс, а значения словаря — новый индекс.

Я также мог бы использовать лямбда-выражение, чтобы избежать передачи этого длинного словаря:

df.rename(index=lambda x: "Nation "+str(x), inplace=True)
print(df)

Видите, как мы уменьшаем дублирование с помощью лямбда-функции?

Прежде чем продолжить, попробуйте применить приведенное выше выражение и убедитесь, что результат правильный.

Ось, используемая при переименовании столбцов или индекса

Функцию переименования можно также вызвать, используя другое соглашение.

Это соглашение использует параметр axis, чтобы указать, является ли функция переименования индексом или столбцами. Вот возможные значения для axis:

  • Индекс задается с использованием «index» или 0 в качестве значения оси (это значение по умолчанию).
  • Столбцы выбираются с использованием либо «столбцов», либо 1 в качестве значения оси.

Ниже вы можете увидеть общий синтаксис:

DataFrame.rename(mapper, axis={'index', 'columns'})

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

Например, давайте посмотрим, как бы мы переписали вызовы функции переименования, которые использовались ранее в этом уроке…

  1. Переименовать столбцы

Все выражения обновляют столбцы одинаково.

df.rename(columns={"Countries":"Country", "Capitals":"Capital"}, inplace=True)

df.rename({"Countries":"Country", "Capitals":"Capital"}, axis='columns', inplace=True)

df.rename({"Countries":"Country", "Capitals":"Capital"}, axis=1, inplace=True)

2. Переименовать индекс

Все выражения обновляют индекс одинаково:

df.rename(index=lambda x: "Nation "+str(x), inplace=True)

df.rename(lambda x: "Nation "+str(x), axis='index', inplace=True)

df.rename(lambda x: "Nation "+str(x), axis=0, inplace=True)

Имеет ли это смысл?

Убедитесь, что выходные данные двух соглашений одинаковы.

Изменить столбцы и индекс одновременно

До сих пор мы видели, как переименовывать столбцы или индекс, но мы также можем переименовать и то, и другое с помощью одного выражения.

Вот пример, который обновляет и столбцы, и индекс:

df.rename(columns={"Countries":"Country", "Capitals":"Capital"}, index=lambda x: "Nation "+str(x), inplace=True)

Вы можете видеть, что мы передали оба параметра — столбцы и индекс — в функцию переименования.

Переименование столбцов с помощью add_prefix и add_suffix

Pandas предоставляет еще две функции для переименования столбцов в DataFrame:

  • add_prefix: добавляет префикс ко всем именам столбцов.
  • add_suffix: добавляет суффикс ко всем именам столбцов.

Оба они возвращают фрейм данных с обновленными столбцами.

Давайте посмотрим, как они работают на практике…

Начнем со следующего фрейма данных:

        Countries Capitals 0 Italy Rome 1 United Kingdom London 2 Germany Berlin 3 Greece Athens

Примените add_prefix к фрейму данных, чтобы добавить «col_» перед каждой меткой столбца:

print(df.add_prefix('col_'))

[output]
    col_Countries col_Capitals 0 Italy Rome 1 United Kingdom London 2 Germany Berlin 3 Greece Athens

И аналогичным образом для add_suffix:

print(df.add_suffix('_col'))

[output]
    Countries_col Capitals_col 0 Italy Rome 1 United Kingdom London 2 Germany Berlin 3 Greece Athens

Заключение

Теперь вы знаете, как переименовывать столбцы в DataFrame с помощью Pandas. У вас есть несколько способов сделать это в зависимости от того, какой вы предпочитаете.

И вы также знаете, как переименовать индекс DataFrame.

Мы также увидели, как объединить функцию переименования DataFrame с другими функциями Python, включая лямбда-выражения.

Автор

Фото аватара

Владимир Михайлов

Программист на Python с большим количеством опыта и разнообразных проектов.