現在選択されている回答では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には、行と列のインデックスごとに1つのレベルがあります。行インデックスと列インデックスの両方に名前はありません。行インデックスレベルの名前を「names」に変更してみましょう。
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
して、インデックスレベル名を効果的に削除できます。
シリーズは同様に機能しますが、いくつかの違いがあります
3つのインデックスレベルを持つシリーズを作成しましょう
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
DataFrameで行ったのと同じように使用できます
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
。DataFrameからSeriesを作成する場合、この属性は列名に設定されます。
文字列名をrename
メソッドに渡して変更できます
s.rename('FOOOOOD')
state color
Jane NY blue Steak
Nick TX green Lamb
Aaron FL red Mango
Name: FOOOOOD, dtype: object
データフレームにはこの属性がなく、このように使用すると、実際には例外が発生します
df.rename('my dataframe')
TypeError: 'str' object is not callable
Pandas 0.21以前rename_axis
は、インデックスと列の値の名前を変更するために使用できました。廃止予定なので、これを行わないでください
rename_axis
方法の非常に詳細な説明を確認してください。