当前选择的答案未提及可用于重命名索引和列级别的rename_axis方法。
在重命名指数水平时,熊猫有些怪癖。 还有一个新的DataFrame方法rename_axis可用于更改索引级别名称。
我们来看看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'])
您可以使用rename_axis有效删除索引级别名称。
系列工作类似,但有一些差异
让我们创建一个具有三个索引级别的系列
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
我们可以像使用DataFrames一样使用rename_axis
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
请注意,系列下面有一个额外的元数据,名为rename_axis。从DataFrame创建Series时,此属性设置为列名。
我们可以将字符串名称传递给rename_axis方法来进行更改
s.rename('FOOOOOD')
state color
Jane NY blue Steak
Nick TX green Lamb
Aaron FL red Mango
Name: FOOOOOD, dtype: object
DataFrames没有此属性,如果像这样使用,实际上会引发异常
df.rename('my dataframe')
TypeError: 'str' object is not callable
在pandas 0.21之前,您可以使用rename_axis重命名索引和列中的值。 它已被弃用,所以不要这样做