前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >5分钟学会Pandas中iloc/loc/ix区别

5分钟学会Pandas中iloc/loc/ix区别

作者头像
刘早起
发布2020-04-22 16:34:23
发布2020-04-22 16:34:23
1.8K00
代码可运行
举报
文章被收录于专栏:早起Python早起Python
运行总次数:0
代码可运行
大家好,在使用pandas进行数据分析过程中,回想一下你是怎么对一个数据集进行数据切片,是不是百度:pandas如何提取第x行数据,然后根据一堆结果找到一个能用的就完事了,那么你一定会迷失在pandas中的切片函数:.iloc().loc().ix()中,本文就是为了解决这个问题,通过一个简单的DataFrame彻底搞明白这三个函数到底有什么区别,又该怎么使用。

首先我们创建一个DataFrame用于讲解?

代码语言:javascript
代码运行次数:0
复制
data = {'a':[11,22,33,44],
       'b':['aa','bb','cc','dd'],
       'c':[9,8,7,6],
        'd':[1,2,3,4]
       }
df = DataFrame(data)
df

a

b

c

d

0

11

aa

9

1

1

22

bb

8

2

2

33

cc

7

3

3

44

dd

6

4

iloc:通过行/列号选取数据

.iloc就是通过行/列号来选取数据,比如我们可以这样来选取第0行数据?

代码语言:javascript
代码运行次数:0
复制
df.iloc[0]
代码语言:javascript
代码运行次数:0
复制
a    11
b    aa
c     9
d     1
Name: 0, dtype: object
也可以按照行号选取多行数据?
代码语言:javascript
代码运行次数:0
复制
df.iloc[0:2]

a

b

c

d

0

11

aa

9

1

1

22

bb

8

2

也可按照列号选取某列,如选取第二列

代码语言:javascript
代码运行次数:0
复制
df.iloc[:,[1]]

b

0

aa

1

bb

2

cc

3

dd

当然也可以按照行号选取某行某列,比如选取第0行第2列

代码语言:javascript
代码运行次数:0
复制
df.iloc[0:1,[1]]

b

0

aa

当然也可以根据行号选取多行多列,比如选取第0-2行第0-2列

代码语言:javascript
代码运行次数:0
复制
df.iloc[0:2,[0,1]]

a

b

0

11

aa

1

22

bb

loc通过标签选取数据

.loc()函数是通过标签选取数据,如果搞不懂什么是标签什么是位置?

比如我们选取第1行数据

代码语言:javascript
代码运行次数:0
复制
df.loc[0] #选取第1行 因为第1行的行号是0所以和iloc效果相同
代码语言:javascript
代码运行次数:0
复制
a    11
b    aa
c     9
d     1
Name: 0, dtype: object
代码语言:javascript
代码运行次数:0
复制
再创建一个df1用于示例
代码语言:javascript
代码运行次数:0
复制
data = {'a':[11,22,33,44],
       'b':['aa','bb','cc','dd'],
       'c':[9,8,7,6],
        'd':[1,2,3,4]
       }
df1 = DataFrame(data,index = ['a','b','c','d'])
df1

a

b

c

d

a

11

aa

9

1

b

22

bb

8

2

c

33

cc

7

3

d

44

dd

6

4

按标签选取第b行

代码语言:javascript
代码运行次数:0
复制
df1.loc['b']
代码语言:javascript
代码运行次数:0
复制
a    22
b    bb
c     8
d     2
Name: b, dtype: object

按标签选取多行?

代码语言:javascript
代码运行次数:0
复制
df1.loc['b':]

a

b

c

d

b

22

bb

8

2

c

33

cc

7

3

d

44

dd

6

4

按标签选取某列?

代码语言:javascript
代码运行次数:0
复制
df1.loc[:,['a']] #通过标签选取某列

a

a

11

b

22

c

33

d

44

按标签选取多列?

代码语言:javascript
代码运行次数:0
复制
df1.loc[:,['a','b']]

a

b

a

11

aa

b

22

bb

c

33

cc

d

44

dd

按标签选取某行某列?

代码语言:javascript
代码运行次数:0
复制
df1.loc['a',['b','c']]
代码语言:javascript
代码运行次数:0
复制
b    aa
c     9
Name: a, dtype: object

ix 简单粗暴 混合使用

ix就是把iloc和loc语法综合了,爱用哪个用哪个,不过在有些版本的pandas中取消了ix函数,我们再看一下df?

代码语言:javascript
代码运行次数:0
复制
df

a

b

c

d

0

11

aa

9

1

1

22

bb

8

2

2

33

cc

7

3

3

44

dd

6

4

使用ix可以像iloc通过行号选取?

代码语言:javascript
代码运行次数:0
复制
df.ix[1]
代码语言:javascript
代码运行次数:0
复制
a    22
b    bb
c     8
d     2
Name: 1, dtype: object

也可以像loc通过标签选取?

代码语言:javascript
代码运行次数:0
复制
df1.ix['a']
代码语言:javascript
代码运行次数:0
复制
a    11
b    aa
c     9
d     1
Name: a, dtype: object

可以通过行号选取指定位置的数据?

代码语言:javascript
代码运行次数:0
复制
df1.ix[3,3] #通过行号选取指定位置的数据
代码语言:javascript
代码运行次数:0
复制
4

可以通过标签选取指定位置的数据?

代码语言:javascript
代码运行次数:0
复制
df1.ix['a','a']  #通过标签选取指定位置的数据
代码语言:javascript
代码运行次数:0
复制
11
代码语言:javascript
代码运行次数:0
复制
按照条件选取数据

掌握了上面的方法我们就可以按照条件选取数据,比如通过单个条件选取数据

代码语言:javascript
代码运行次数:0
复制
df1.loc[df1['a']==11]

a

b

c

d

a

11

aa

9

1

也可以通过多个条件选取数据

代码语言:javascript
代码运行次数:0
复制
df1.loc[(df1['a']==11)&(df1['d']==1)]

a

b

c

d

a

11

aa

9

1

代码语言:javascript
代码运行次数:0
复制
代码语言:javascript
代码运行次数:0
复制
以上就是pandas中数据切片函数.loc()、.iloc()、.ix()的区别与用法,学会了吗?
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 早起Python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • iloc:通过行/列号选取数据
  • loc通过标签选取数据
  • ix 简单粗暴 混合使用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档