Pandas的iloc、loc、ix的区别

(作者:陈玓玏)

1、例子

取DataFrame的部分数据,或者修改部分数据是非常非常常见的操作,但是实际应用中,到底使用ix方法,还是iloc方法,还是loc方法,还需要讨论。请看下面的实验:

import pandas as pd

data = [['自有房',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]+5
data.iloc[0,1] = data.iloc[0,1]+5
data.loc['lc','age'] = data.loc['lc','age']+5

data.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只接受位置索引。

你可能感兴趣的:(Python)