详解pandas DataFrame的查询方法(loc,iloc,at,iat,ix的用法和区别)


Posted in Python onAugust 02, 2019

在操作DataFrame时,肯定会经常用到loc,iloc,at等函数,各个函数看起来差不多,但是还是有很多区别的,我们一起来看下吧。

首先,还是列出一个我们用的DataFrame,注意index一列,如下:

详解pandas DataFrame的查询方法(loc,iloc,at,iat,ix的用法和区别)

接下来,介绍下各个函数的用法:

1、loc函数

愿意看官方文档的,请戳这里,这里一般最权威。
loc函数是基于“标签”选择数据的,但是也可以接受一个boolean的array,对于每个用法,我们从参数方面来一一举例:

1.1 单个label

接受一个“标签”(label)参数,返回一个Series,例如下面这个例子收一个标签,返回通过这个标签定位的行的值,注意这里是通过标签定位,而不是通过中括号中的数字定位第几行,之后我们通过对比iloc函数时还会细说。

test_dict_df.loc[1] #return the row with name 'Bob'
test_dict_df.loc[7] #return the row with name 'Time' important!!!
# type(test_dict_df.loc[1]) #pandas.core.series.Series

1.2 一个label的array

如果键入一个标签的array,那么就返回一个对应的DataFrame:

test_dict_df.loc[[1,2,4]]

结果如下:

详解pandas DataFrame的查询方法(loc,iloc,at,iat,ix的用法和区别)

1.3 加入一个切片array

test_dict_df.loc[[1:4]]

结果如下:

详解pandas DataFrame的查询方法(loc,iloc,at,iat,ix的用法和区别)

1.4 行标签,列标签

通过在中括号中加入行标签和列标签来定位一个cell,相当于坐标的定位:

test_dict_df.loc[1,'english'] #result:94

1.5 行标签或者列标签是切片array

test_dict_df.loc[1:4,'english']
# test_dict_df.loc[1:4,'english':'math']

1.6 还可以接受条件,进行选择

例如我们选择英语成绩超过90的所有行:

test_dict_df.loc[test_dict_df['english']>90]

详解pandas DataFrame的查询方法(loc,iloc,at,iat,ix的用法和区别)

当然,也可以再条件选择后,再加入列选择,列选择的时候可以单列,也可以是切片数组,通过上面的介绍这里就可以灵活处理:

test_dict_df.loc[test_dict_df['english']>90,'english'] #single label
test_dict_df.loc[test_dict_df['english']>90,'english':'name'] #slice array
test_dict_df.loc[test_dict_df['english']>90,['english','name']] #label array

1.7 接受一个boolean的array

可以接受一个boolean的array,相当于按照这个表的真假按照位置的顺序选择值

test_dict_df.loc[[True,False,False,True]]

loc还有很多用法,这里先介绍到这里吧,当然如果你的DataFrame是复合的行或者复合列,写法也是不同的,具体就可以查阅官方文档了!

2、iloc函数

官方文档戳这里。

iloc函数与loc函数不同的是,它接受的是一个数字,代表着要选择数据的位置:

test_dict_df.iloc[6]

这代表我们选择的是第6行,而不是index为6的那一行。当然,也可以接受一个boolean的array,相当于按照这个表的真假按照位置的顺序选择值:

test_dict_df.iloc[[True,False,False,True]]

这里iloc也可以接受切片array:

# test_dict_df.iloc[1:2]
test_dict_df.iloc[[1,2,4]]

3、ix函数(0.20.0版本后已经弃用)

ix就是一种混合索引,字符串的标签和证书的数据索引都可以作为合法输入,其实相当于loc和iloc的一个混合方法:

test_dict_df.ix['Alice']
test_dict_df.ix[1]

上述两种方法都能得到值,这里我们就不追究这个函数具体是怎样的检索顺序或者工作原理了。因为官方给出的是从pandas0.20.0之后,ix函数已经被弃用。其实在使用的时候,ix函数虽然方便,但是的确有时候会显得比较混乱,所以我们之后也尽量少用这个函数吧,还是按照官方大佬的指导。

4、at函数

at是用来选择单个值的,此时用法类似于loc:

test_dict_df.at[1,'english']
test_dict_df.loc[1,'english']

以上两种方法都能选择到,label为1,列为'english'的那个值,但是据说at速度要快,这点我没有考证过。

5、iat函数

iat函数相对于at函数,就相当于iloc相对于loc函数。iat也只能选择一个值。只不过是用索引位置来选择,注意:行列都是索引位置来选择,从0开始数。

# test_dict_df.iat[1,'english'] #error!!!
test_dict_df.iat[2,2] #right!!!

6、概括一下

最后我们概括一下:

1、 loc和iloc函数都是用来选择某行的,iloc与loc的不同是:iloc是按照行索引所在的位置来选取数据,参数只能是整数。而loc是按照索引名称来选取数据,参数类型依索引类型而定;

2、 at和iat函数是只能选择某个位置的值,iat是按照行索引和列索引的位置来选取数据的。而at是按照行索引和列索引来选取数据;

3、 loc和iloc函数的功能包含at和iat函数的功能。

相应的代码连接:github代码

先写到这里,如有新的再补充。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中声明只包含一个元素的元组数据方法
Aug 25 Python
Python读写文件方法总结
Jun 09 Python
解决Python安装后pip不能用的问题
Jun 12 Python
在python中利用GDAL对tif文件进行读写的方法
Nov 29 Python
用python写一个定时提醒程序的实现代码
Jul 22 Python
Python 格式化输出_String Formatting_控制小数点位数的实例详解
Feb 04 Python
mac 上配置Pycharm连接远程服务器并实现使用远程服务器Python解释器的方法
Mar 19 Python
Python3 mmap内存映射文件示例解析
Mar 23 Python
python 5个顶级异步框架推荐
Sep 09 Python
详解基于python的全局与局部序列比对的实现(DNA)
Oct 07 Python
python 根据列表批量下载网易云音乐的免费音乐
Dec 03 Python
Python 实现二叉查找树的示例代码
Dec 21 Python
pandas DataFrame创建方法的方式
Aug 02 #Python
django项目环境搭建及在虚拟机本地创建django项目的教程
Aug 02 #Python
Django缓存系统实现过程解析
Aug 02 #Python
tensor和numpy的互相转换的实现示例
Aug 02 #Python
Django文件存储 自己定制存储系统解析
Aug 02 #Python
使用pycharm在本地开发并实时同步到服务器
Aug 02 #Python
Django文件存储 默认存储系统解析
Aug 02 #Python
You might like
给php新手谈谈我的学习心得
2007/02/25 PHP
隐性调用php程序的方法
2015/06/13 PHP
Javascript 文件夹选择框的两种解决方案
2009/07/01 Javascript
js本身的局限性 别让javascript做太多事
2010/03/23 Javascript
理解JAVASCRIPT中hasOwnProperty()的作用
2013/06/05 Javascript
一个简单的全屏图片上下打开显示网页效果示例
2014/07/08 Javascript
AngularJS入门教程之学习环境搭建
2014/12/06 Javascript
JQuery自动触发事件的方法
2015/06/13 Javascript
js行号显示的文本框实现效果(兼容多种浏览器 )
2015/10/23 Javascript
每天一篇javascript学习小结(基础知识)
2015/11/10 Javascript
全面解析Bootstrap表单使用方法(表单样式)
2015/11/24 Javascript
js实现文字滚动效果
2016/03/03 Javascript
详解angularjs获取元素以及angular.element()用法
2017/07/25 Javascript
Vuex的基本概念、项目搭建以及入坑点
2018/11/04 Javascript
bootstrap实现嵌套模态框的实例代码
2020/01/10 Javascript
vue中使用WX-JSSDK的两种方法(推荐)
2020/01/18 Javascript
node koa2 ssr项目搭建的方法步骤
2020/12/11 Javascript
[02:14]2016国际邀请赛中国区预选赛Ehome晋级之路
2016/07/01 DOTA
Python中操作MySQL入门实例
2015/02/08 Python
用Python编写一个简单的俄罗斯方块游戏的教程
2015/04/03 Python
Python中List.count()方法的使用教程
2015/05/20 Python
记录Python脚本的运行日志的方法
2019/06/05 Python
python实现猜数游戏(保存游戏记录)
2020/06/22 Python
使用ITK-SNAP进行抠图操作并保存mask的实例
2020/07/01 Python
在python3.9下如何安装scrapy的方法
2021/02/03 Python
CSS3伪类选择器:nth-child()
2009/04/02 HTML / CSS
应届生服装设计自我评价
2013/09/20 职场文书
思想品德自我评价
2014/02/04 职场文书
成龙霸王洗发水广告词
2014/03/14 职场文书
企业法人代表证明书
2014/09/27 职场文书
五好文明家庭事迹材料
2014/12/20 职场文书
教代会开幕词
2015/01/28 职场文书
2016自主招生教师推荐信范文
2015/03/23 职场文书
关于拾金不昧的感谢信(五篇)
2019/10/18 职场文书
python中的装饰器该如何使用
2021/06/18 Python
详解Vue中$props、$attrs和$listeners的使用方法
2022/02/18 Vue.js