您的位置:首页 > 其它

Pandas中loc,iloc,ix的区别

2017-12-26 20:53 781 查看
总结:

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: