pandas的初学者都会有一个疑惑,经常看别人的代码有iloc、loc、ix,这三个函数到底有什么区别呢?
首先,这三个都可以用来筛选行列,即filter特定的行、列或者同时选取行列,那么他们三个有什么区别呢,区别主要体现在用法上:
一.loc:根据标签(label)索引,什么是标签呢?
红框框起来的部分就是标签(label)。在这里,行标签就是我们所说的索引(index),列标签就是列名(columns)
stock.loc[0:5,['股票代码','股票名称','当前价','涨跌额','涨跌幅','年初至今','成交量','成交额']]
逗号左边是要筛选的行,逗号右边是要筛选的列。我们平时做数据处理的时候,更常见的情况是选取所有行,但是只要某几列
stock.loc[:,['股票代码','股票名称','当前价','涨跌额','涨跌幅','年初至今','成交量','成交额']]
同理,选取所有列,只要某几行就有:
stock.loc[0:5,:]
小结:loc 选取特定行列的用法:行根据行标签,也就是索引筛选,列根据列标签,列名筛选
如果选取的是所有行或者所有列,可以用:代替
行标签选取的时候,两端都包含,比如[0:5]指的是0,1,2,3,4,5。
二.iloc,根据行标签的位置索引。iloc就是 integer loc 。可以理解为是在loc的基础上,用整数索引。即iloc是基于位置索引的,也就是我们常说的几行几列。还是以stock数据集为例
stock.iloc[0:6,0:8]
上面代码的是stock数据集中第0-5行,第0-7列的内容。这里需要注意的是iloc的0:X中不包括X,只能到X-1.
如果我们需要的是第0-5行,第0,3,4,5列的内容呢?
stock.iloc[0:6,[0,3,4,5]]
小结:iloc基于位置索引,简单来说,就是第几行第几列,只不过这里的行列都是从0开始的。
iloc的0:X中不包括X,只能到X-1.
三.ix相当于loc和iloc的综合版本,既可以按标签选取,又可以按位置选取。也就是说,ix可以识别你是想按照标签选取,还是按照位置选取。
接下来要用到的数据集如下,为了方便阐述ix的用法,将stock的‘股票名称’设置成了索引,也就是行标签。
stock.ix['聚力文化':'海联金汇',0:3]
#这里ix会将行按照标签选取(行选取用了loc的方式),列按照位置选取(列选取用了iloc的方式)。
stock.ix[2:5,'股票代码':'当前价']
#这里ix是将行按照位置选取(行选取用了iloc的方式),列按照标签选取(列选取用了loc的方式)。
最后的结果同上。
关于ix,它是先于iloc、和loc产生的。现在基本上用iloc和loc已经完全能取代ix,所以ix已经被官方弃用了。