pandas中loc、iloc、ix的区别和使用
程序员文章站
2024-01-30 11:00:04
...
在利用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。这在数据分析中将某些列转换为数值型的常用处理。
推荐阅读
-
pandas中loc、iloc、ix的区别和使用
-
python pandas中ix,iloc,loc的区别
-
pandas中ix loc iloc的区别
-
register_globals PHP中register_globals参数为OFF和ON的区别(register_globals 使用详解)
-
vue中watch和computed的区别与使用方法
-
ALAsset中fullScreenImage和fullResolutionImage使用中的区别
-
javascript中apply、call和bind的使用区别
-
jquery中eq和get的区别与使用方法_jquery
-
Python中列表和元组的使用方法和区别详解
-
深入解析Vue.js中v-bind v-model的使用和区别