pandas中loc、iloc、ix的区别和使用

在利用pandas处理数据时loc、iloc、ix对数据的操作很频繁,所以这里简单的介绍一下它们之间的区别和各自的使用。

pandas的索引可归纳为3种

.loc,标签索引             (location)

.iloc,位置索引            (int-localtion)

.ix,标签与位置混合索引

        对于ix先按标签索引尝试操作,然后再按照位置索引尝试操作

注意

    DataFrame索引时可将其看作ndarray操作

    标签的切片索引是包含末尾位置

例子:

data = pd.DataFrame({'a':np.random.randint(1,10,size=5),'b':list('abacd')})
   a  b
0  6  a
1  7  b
2  7  a
3  4  c
4  3  d
In [5]: data['a']
Out[5]:
0    6
1    7
2    7
3    4
4    3
Name: a, dtype: int32

可以看出pandas的列是优先索引的。


In [8]: data[0:2]
Out[8]:
   a  b
0  6  a
1  7  b
如果我们直接使用切片来选择,可以看出它是对行的位置索引选择,并且不包含末尾位置。

loc:

In [6]: data.loc[0:2,'a']
Out[6]:
0    6
1    7
2    7

使用loc来标签索引,这里可以看出使用标签索引是包含切片末尾位置的,这是因为它将0:2中的0、1、2都当作了行标签,而不是数字。

iloc:

In [10]: data.iloc[1:3]
Out[10]:
   a  b
1  7  b
2  7  a

刚才我们说了,iloc它是按照位置来索引的,所以1:3是行的位置索引,并且不包含末为位置

如果我们使用loc标签索引来选择不存在的行标签会怎么样?

In [11]: data2 = pd.DataFrame({'x':[5,4,3,2,1],'y':[1,2,3,4,5]},index=list('abcde'))

In [12]: data2
Out[12]:
   x  y
a  5  1
b  4  2
c  3  3
d  2  4
e  1  5

我们使用loc来选择不存在的行标签:

data2.loc[1:3]
TypeError: cannot do slice indexing on <class 'pandas.core.indexes.base.Index'> with these indexers [1] of <class 'int'>

很明显的报错信息,它找不到1、2、3这三个标签。

同样再使用iloc会如何:

In [13]: data2.iloc[1:3]
Out[13]:
   x  y
b  4  2
c  3  3

可以正确选出结果。

ix:

In [15]: data2.ix[1:3]
Out[15]:
   x  y
b  4  2
c  3  3

ix前面我们说了它是混合索引,并且先按照标签进行索引,这里它没有找到对应标签,于是以位置进行索引,所以不包含末为位置。

In [16]: data2.ix['b':'c']
Out[16]:
   x  y
b  4  2
c  3  3

看,直接我们使用标签索引也能找到对应值,并且标签包含末为位置!

好了以上就是loc、iloc以及ix的简单使用和区别。


利用它们我们还可以在对行选择的同时对列进行选择,达到对数据的筛选目的.。

In [18]: data.loc[1:3,'a']
Out[18]:
1    7
2    7
3    4
Name: a, dtype: int32


df.loc[df['gender'] == 'male', 'label'] = 0

表示增加'label'列,且当df的'gender'为'male'时,其值赋为0。这在数据分析中将某些列转换为数值型的常用处理。


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值