当前选择的答案没有提到rename_axis方法,该方法可用于重命名索引和列级别。
Pandas在重命名指数级别时有些古怪。还有一个新的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对于每个行索引和列索引都有一个级别。行索引和列索引都没有名称。让我们将行索引级别名称更改为'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来有效地删除索引级别的名称。
系列工作原理类似,但有一些不同
让我们创建一个具有三个索引级别的Series
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
注意,在Series下面有一个额外的元数据,称为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
dataframe没有这个属性,如果这样使用,实际上会引发一个异常
df.rename('my dataframe')
TypeError: 'str' object is not callable
在pandas 0.21之前,您可以使用rename_axis重命名索引和列中的值。它已被弃用,所以不要这样做