pandas df.rename()
非昨 人气:0df.rename()用于更改行列的标签,即行列的索引。可以传入一个字典或者一个函数。在数据预处理中,比较常用。
官方文档:
DataFrame.rename(self, mapper=None, index=None, columns=None, axis=None, copy=True, inplace=False, level=None, errors=‘ignore’)
参数解释:
创建实例
import pandas as pd df = pd.DataFrame({'name':['zhao','qian','sun','wang'],'mark':[150,122,155,132],'gender':['female','female','male','male']}) df
name mark gender
0 zhao 150 female
1 qian 122 female
2 zhou 155 male
3 wang 132 male
mapper:dict or function
映射关系,可以是字典,也可以是一个函数。
df.rename({0:111}) name mark gender 111 zhao 150 female #行索引从0变为111 1 qian 122 female 2 zhou 155 male 3 wang 132 male df.rename(lambda x: x+11) #参数也可以是函数,索引都加了11 name mark gender 11 zhao 150 female 12 qian 122 female 13 zhou 155 male 14 wang 132 male
index、columns、axis:
这3个参数作用类似,dataframe中有行和列两个方向,在改名时,需要指明改名的是行还是列(默认是行),使用df.rename(index = mapper)或者df.rename(columns=mapper)的形式,和df.rename(mapper,axis=0 or 1)的效果是一样的
df.rename(lambda x: x+'11',axis=1) name11 mark11 gender11 #列索引都加了11,name变为name11 0 zhao 150 female 1 qian 122 female 2 zhou 155 male 3 wang 132 male df.rename(columns=lambda x: x+'11')#等价于上面,写法更简洁直观 name11 mark11 gender11 0 zhao 150 female 1 qian 122 female 2 zhou 155 male 3 wang 132 male
copy:bool,default = True
默认为True,效果不清楚。。。文档就一句话,与会复制底层数据(also copy underlying data), 等一个课代表解答一下。
inplace:bool,default False
将结果返回赋值给原变量,无需再次将结果赋值给新变量。即df.rename(inplace=True)之后,df的值发生改变(pandas中好多方法都有这个参数,此处就演示了)
level int,level name,default none
针对多层索引,指定需要改名字的索引具体是哪一个。
df1 = pd.DataFrame([10,11,12,13],index=[['a','a','b','b'],[1,2,3,4],[4,3,2,1]],columns=['tt']) df1 tt #前三列都为索引 a 1 4 10 2 3 11 b 3 2 12 4 1 13 df1.rename(index={1:'dd'}) tt#索引中所有的1都变成了dd a dd 4 10 2 3 11 b 3 2 12 4 dd 13 df1.rename(index={1:'dd'},level=1) tt#只有第2列索引改为dd(从0开始计数) a dd 4 10 2 3 11 b 3 2 12 4 1 13
errors:{‘ignore’, ‘raise’}, default ‘ignore’
发生错误的处理方式,ignore为忽略,raise为报错。比如改名字是,如果传入的参数中包含索引列没有的值,就会报错,ignore或者raise来决定错误的处理方式
df1 tt #前三列都为索引 a 1 4 10 2 3 11 b 3 2 12 4 1 13 df1.rename(index={11:'dd'},level=1,errors='raise') KeyError: '[11] not found in axis'#报错,11没在索引内
加载全部内容