Pandas Переименовать столбец и индекс
Иногда мы хотим переименовать столбцы и индексы в объекте Pandas DataFrame. Мы можем использовать функцию pandas DataFrame rename() для переименования столбцов и индексов. Он поддерживает следующие параметры.
- сопоставитель: словарь или функция для применения к столбцам и индексам. Параметр оси определяет целевую ось — столбцы или индексы.
- index: для изменения имен индексов должен быть словарь или функция.
- columns: для изменения имен столбцов должен быть словарь или функция.
- ось: может быть целым числом или строкой. Он используется с параметром «картограф» для определения целевой оси. Допустимые значения: («индекс», «столбцы») или число (0, 1). Значение по умолчанию — «индекс».
- inplace: если True, DataFrame изменен. В противном случае возвращается новый DataFrame, а текущий DataFrame остается неизменным. Значение по умолчанию — «Ложь».
- level: может быть int или именем уровня. Используется в случае MultiIndex, переименовывать только метки на указанном уровне.
- ошибки: возможные значения («игнорировать», «поднять»), по умолчанию — «игнорировать». Если указано как «поднять», то KeyError возникает, когда диктоподобный «сопоставитель», «индекс» или «столбцы» содержит метки, которых нет в преобразуемом индексе. Если «игнорировать», существующие ключи будут переименованы, а дополнительные ключи будут проигнорированы.
Некоторые важные моменты о функции rename().
- Рекомендуется использовать аргументы с ключевыми словами, чтобы четко указать намерение.
- С помощью этой функции мы можем переименовать один столбец или несколько столбцов в зависимости от значений в словаре.
Давайте рассмотрим несколько примеров использования функции 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