В текущем выбранном ответе не упоминается rename_axis
метод, который можно использовать для переименования уровней индекса и столбца.
Панды имеют некоторую причудливость, когда дело доходит до переименования уровней индекса. Также rename_axis
доступен новый метод DataFrame для изменения имен на уровне индекса.
Давайте посмотрим на DataFrame
df = pd.DataFrame({'age':[30, 2, 12],
'color':['blue', 'green', 'red'],
'food':['Steak', 'Lamb', 'Mango'],
'height':[165, 70, 120],
'score':[4.6, 8.3, 9.0],
'state':['NY', 'TX', 'FL']},
index = ['Jane', 'Nick', 'Aaron'])
Этот DataFrame имеет один уровень для каждого индекса строки и столбца. И индекс строки, и столбец не имеют имени. Давайте изменим имя уровня индекса строки на «имена».
df.rename_axis('names')
У rename_axis
метода также есть возможность изменить имена уровня столбца, изменив axis
параметр:
df.rename_axis('names').rename_axis('attributes', axis='columns')
Если вы установите индекс для некоторых столбцов, то имя столбца станет именем нового уровня индекса. Давайте добавим уровни индекса к нашему исходному DataFrame:
df1 = df.set_index(['state', 'color'], append=True)
df1
Обратите внимание, что у исходного индекса нет имени. Мы все еще можем использовать, rename_axis
но нам нужно передать ему список той же длины, что и количество уровней индекса.
df1.rename_axis(['names', None, 'Colors'])
Вы можете использовать None
для эффективного удаления имен уровня индекса.
Сериалы работают аналогично, но с некоторыми отличиями
Давайте создадим серию с тремя уровнями индекса
s = df.set_index(['state', 'color'], append=True)['food']
s
state color
Jane NY blue Steak
Nick TX green Lamb
Aaron FL red Mango
Name: food, dtype: object
Мы можем использовать rename_axis
аналогично тому, как мы сделали с DataFrames
s.rename_axis(['Names','States','Colors'])
Names States Colors
Jane NY blue Steak
Nick TX green Lamb
Aaron FL red Mango
Name: food, dtype: object
Обратите внимание, что под серией есть дополнительный фрагмент метаданных Name
. При создании Series из DataFrame этому атрибуту присваивается имя столбца.
Мы можем передать имя строки rename
методу, чтобы изменить его
s.rename('FOOOOOD')
state color
Jane NY blue Steak
Nick TX green Lamb
Aaron FL red Mango
Name: FOOOOOD, dtype: object
У DataFrames нет этого атрибута, и infact вызовет исключение, если используется так
df.rename('my dataframe')
TypeError: 'str' object is not callable
До появления панды 0.21 вы могли бы использовать rename_axis
для переименования значений в индексе и столбцах. Это устарело, так что не делайте этого
rename_axis
метода.