Pandas中loc,iloc,ix的区别

总结:

loc需要传入的是index的label。

iloc需要传入的是index的position(行号)

ix优先按label索引,如果找不到label,再按position索引。

例如:

>>> s = pd.Series(np.nan, index=[49,48,47,46,45, 1, 2, 3, 4, 5])
>>> s
49   NaN
48   NaN
47   NaN
46   NaN
45   NaN
1    NaN
2    NaN
3    NaN
4    NaN
5    NaN

比较下列三个的差异。

s.loc[:3]

s.iloc[:3]

s.ix[:3]
>>> s.loc[:3] 
49   NaN
48   NaN
47   NaN
46   NaN
45   NaN
1    NaN
2    NaN
3    NaN
# s.loc[:3] 返回的是直到索引label为3的所有行。
>>> s.iloc[:3] 
49   NaN
48   NaN
47   NaN
# s.iloc[:3]返回的是前三行。
>>> s.ix[:3]
49   NaN
48   NaN
47   NaN
46   NaN
45   NaN
1    NaN
2    NaN
3    NaN
# s.ix[:3]先按label索引。

再比如:

>>> s.iloc[:6]
49   NaN
48   NaN
47   NaN
46   NaN
45   NaN
1    NaN

>>> s.loc[:6]
KeyError: 6

>>> s.ix[:6]
KeyError: 6

s.loc[:6]找不到为6的label,所以发生了KeyError;因为索引号为整数类型,s.ix[:6]找不到label为6的,如果索引号为混合类型,则不会报错。

如:

>>> s2 = pd.Series(np.nan, index=['a','b','c','d','e', 1, 2, 3, 4, 5])
>>> s2.index.is_mixed() 
True
>>> s2.ix[:6]
a   NaN
b   NaN
c   NaN
d   NaN
e   NaN
1   NaN

>>> s2.ix[:'c'] 
a   NaN
b   NaN
c   NaN

对于DataFrame数据,如:

>>> df = pd.DataFrame(np.nan, 
                      index=list('abcde'),
                      columns=['x','y','z', 8, 9])
>>> df
    x   y   z   8   9
a NaN NaN NaN NaN NaN
b NaN NaN NaN NaN NaN
c NaN NaN NaN NaN NaN
d NaN NaN NaN NaN NaN
e NaN NaN NaN NaN NaN



>>> df.ix[:'c', :4]
    x   y   z   8
a NaN NaN NaN NaN
b NaN NaN NaN NaN
c NaN NaN NaN NaN


>>> df.iloc[:df.index.get_loc('c') + 1, :4]
    x   y   z   8
a NaN NaN NaN NaN
b NaN NaN NaN NaN
c NaN NaN NaN NaN
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值