Поиск по сайту:

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


Иногда мы хотим переименовать столбцы и индексы в объекте Pandas DataFrame. Мы можем использовать функцию pandas DataFrame rename() для переименования столбцов и индексов. Он поддерживает следующие параметры.

  • сопоставитель: словарь или функция для применения к столбцам и индексам. Параметр оси определяет целевую ось — столбцы или индексы.
  • index: для изменения имен индексов должен быть словарь или функция.
  • columns: для изменения имен столбцов должен быть словарь или функция.
  • ось: может быть целым числом или строкой. Он используется с параметром «картограф» для определения целевой оси. Допустимые значения: («индекс», «столбцы») или число (0, 1). Значение по умолчанию — «индекс».
  • inplace: если True, DataFrame изменен. В противном случае возвращается новый DataFrame, а текущий DataFrame остается неизменным. Значение по умолчанию — «Ложь».
  • level: может быть int или именем уровня. Используется в случае MultiIndex, переименовывать только метки на указанном уровне.
  • ошибки: возможные значения («игнорировать», «поднять»), по умолчанию — «игнорировать». Если указано как «поднять», то KeyError возникает, когда диктоподобный «сопоставитель», «индекс» или «столбцы» содержит метки, которых нет в преобразуемом индексе. Если «игнорировать», существующие ключи будут переименованы, а дополнительные ключи будут проигнорированы.

Некоторые важные моменты о функции rename().

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

Давайте рассмотрим несколько примеров использования функции rename() в Pandas.

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

import pandas as pd

d1 = {'Name': ['Pankaj', 'Lisa', 'David'], 'ID': [1, 2, 3], 'Role': ['CEO', 'Editor', 'Author']}

df = pd.DataFrame(d1)

print('Source DataFrame:\n', df)

# rename columns
df1 = df.rename(columns={'Name': 'EmpName', 'ID': 'EmpID', 'Role': 'EmpRole'})
print('Result DataFrame:\n', df1)

Выход:

Source DataFrame:
      Name  ID    Role
0  Pankaj   1     CEO
1    Lisa   2  Editor
2   David   3  Author
Result DataFrame:
   EmpName  EmpID EmpRole
0  Pankaj      1     CEO
1    Lisa      2  Editor
2   David      3  Author

Приведенный выше вызов функции rename() также можно записать следующим образом.

df1 = df.rename(mapper={'Name': 'EmpName', 'ID': 'EmpID', 'Role': 'EmpRole'},
                axis='columns')  # axis=1 corresponds to columns

Понятно, что использование аргументов ключевого слова понятнее, чем использование аргументов mapper и axis.

2. Панды переименовывают один столбец

Если вы хотите переименовать один столбец, просто передайте одну пару ключ-значение в параметре столбцов dict.

df1 = df.rename(columns={'Name': 'EmpName'})
print(df1)

Выход:

  EmpName  ID    Role
0  Pankaj   1     CEO
1    Lisa   2  Editor
2   David   3  Author

Результат будет таким же, если в словаре столбцов есть несовпадающее сопоставление.

df1 = df.rename(columns={'Name': 'EmpName', 'X': 'Y'})  # same result since there is no X column

3. Индексы переименования Pandas

Если вы хотите переименовать индексы, передайте dict для параметра index.

df2 = df.rename(index={0: '#0', 1: '#1', 2: '#2'})
print('Renamed Indexes:\n', df2)

Выход:

Renamed Indexes:
       Name  ID    Role
#0  Pankaj   1     CEO
#1    Lisa   2  Editor
#2   David   3  Author

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

df2 = df.rename({0: '#0', 1: '#1', 2: '#2'}, axis=0)  
# axis='index' will work, first argument is assigned to 'mapper'

4. Панды переименовывают единый индекс

df2 = df.rename(index={1: '#1'})
print(df2)

Выход:

      Name  ID    Role
0   Pankaj   1     CEO
#1    Lisa   2  Editor
2    David   3  Author

5. Изменение DataFrame на месте

Если вы хотите изменить сам исходный DataFrame, передайте аргумент inplace как True.

import pandas as pd

d1 = {'Name': ['Pankaj', 'Lisa', 'David'], 'ID': [1, 2, 3], 'Role': ['CEO', 'Editor', 'Author']}

df = pd.DataFrame(d1)

print('Source DataFrame:\n', df)

df.rename(index={0: '#0', 1: '#1', 2: '#2'}, columns={'Name': 'EmpName', 'ID': 'EmpID', 'Role': 'EmpRole'}, inplace=True)

print('Source DataFrame:\n', df)

Выход:

Source DataFrame:
      Name  ID    Role
0  Pankaj   1     CEO
1    Lisa   2  Editor
2   David   3  Author

Source DataFrame:
    EmpName  EmpID EmpRole
#0  Pankaj      1     CEO
#1    Lisa      2  Editor
#2   David      3  Author

6. Использование функции сопоставления для переименования столбцов

df = pd.DataFrame({'NAME': ['Pankaj', 'Lisa'], 'ID': [1, 2], 'ROLE': ['CEO', 'Editor']})
print(df)

df.rename(mapper=str.lower, axis=1, inplace=True)
print(df)

Выход:

     NAME  ID    ROLE
0  Pankaj   1     CEO
1    Lisa   2  Editor

     name  id    role
0  Pankaj   1     CEO
1    Lisa   2  Editor

7. Использование функций для переименования столбцов и индексов

import pandas as pd
import math

df = pd.DataFrame({'NAME': ['Pankaj', 'Lisa'], 'ID': [1, 2], 'ROLE': ['CEO', 'Editor']})

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

Выход:

            name  id    role
0.00000   Pankaj   1     CEO
57.29578    Lisa   2  Editor

8. Строгое переименование и вызов KeyError

import pandas as pd

df = pd.DataFrame({'NAME': ['Pankaj', 'Lisa'], 'ID': [1, 2], 'ROLE': ['CEO', 'Editor']})

df1 = df.rename(columns={'Salary': 'EmpSalary'})  # unmatched mappings are ignored

df1 = df.rename(columns={'Salary': 'EmpSalary'}, errors='raise')  # unmatched mappings raising KeyError

Выход:

Traceback (most recent call last):
  File "/Users/pankaj/Documents/PycharmProjects/hello-world/journaldev/pandas/pandas_rename_column.py", line 58, in <module>
    df1 = df.rename(columns={'Salary': 'EmpSalary'}, errors='raise')
KeyError: "['Salary'] not found in axis"

9. Ссылки

  • Pandas DataFrame rename() API Doc
  • Учебное пособие по Python Pandas