当前选择的答案未提及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 对每个行和列索引都有一个级别。行索引和列索引都没有名称。让我们将行索引级别名称更改为“名称”。
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
像使用 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
请注意,在 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
DataFrames 没有这个属性,如果像这样使用实际上会引发异常
df.rename('my dataframe')
TypeError: 'str' object is not callable
在 pandas 0.21 之前,您可以使用rename_axis
重命名索引和列中的值。它已被弃用,所以不要这样做