(作者:陈玓玏)
1、例子
取DataFrame的部分数据,或者修改部分数据是非常非常常见的操作,但是实际应用中,到底使用ix方法,还是iloc方法,还是loc方法,还需要讨论。请看下面的实验:
import pandas as pddata = [['自有房',40,50000],['无自有房',22,13000],['自有房',30,30000]]data = pd.DataFrame(data,index=['lc','cc','lbb'],columns=['house','age','income'])df = data.ix[0,1]df = data.iloc[0,1]df = data.loc['lc','age']# df = data.loc[0,'age'] #报错# df = data.iloc[0,'age'] #报错df = data.ix[0,'age']df = data.ix[data['age']>=30]df = data.ix[data['age']>=30,0]# df = data.iloc[data['age']>=30,0] #报错# df = data.iloc[data['age']>=30] #报错df = data.loc[data['age']>=30]df = data.loc[data['age']>=30,'age']df = data[data['age']>=30]# df = data[data['age']>=30,'age'] #报错df = data[data['age']>=30]['age']print(df)data.ix[0,1] = data.ix[0,1]+5data.iloc[0,1] = data.iloc[0,1]+5data.loc['lc','age'] = data.loc['lc','age']+5data.ix[0,'age'] = data.ix[0,1]+5# data.iloc[0,'age'] = data.iloc[0,1]+5 #报错data.loc[0,'age'] = data.loc['lc','age']+5 #会新增一行索引为0的行,且age为lc行age+5,但另外两列为空值print(data)
2、总结
通过实验结果其实就可以看出来了,结论如下:
1、ix可以接受位置索引和name索引,且行和列不必都是位置或name,但是Pycharm有提示过我ix方法要被抛弃了,最好不用;
2、loc是基于name索引的,如果你行或列其中一个用了位置索引,它会报index错误的,但是如果你是赋值给它,它会默认新增一行一列的;
3、iloc是基于位置索引的,如果你行或列其中一个用了name索引,也是会报index错误的,而且赋值也不行;
4、这三种方法都可以添加条件进行过滤。
综上所述,三种方法的功能都是取数,且都具有过滤功能,只是ix可以接受位置和name两种形式的索引,loc只接受name形式,而iloc只接受位置索引。