详解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实现GUI学生信息管理系统
Apr 05 Python
解读python logging模块的使用方法
Apr 17 Python
Python爬虫小技巧之伪造随机的User-Agent
Sep 13 Python
Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】
Mar 30 Python
python 随机生成10位数密码的实现代码
Jun 27 Python
python 判断三个数字中的最大值实例代码
Jul 24 Python
Python (Win)readline和tab补全的安装方法
Aug 27 Python
Python计算信息熵实例
Jun 18 Python
python实现企业微信定时发送文本消息的示例代码
Nov 24 Python
Django多个app urls配置代码实例
Nov 26 Python
python3实现简单飞机大战
Nov 29 Python
django注册用邮箱发送验证码的实现
Apr 18 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中ADODB类详解
2008/03/25 PHP
php命名空间学习详解
2014/02/27 PHP
PHP源码分析之变量的存储过程分解
2014/07/03 PHP
UTF-8正则表达式如何匹配汉字
2015/08/03 PHP
yii2学习教程之5种内置行为类详解
2017/08/03 PHP
兼容FireFox 的 js 日历 支持时间的获取
2009/03/04 Javascript
Javascript中的delete介绍
2012/09/02 Javascript
javascript调试过程中找不到哪里出错的可能原因
2013/12/16 Javascript
JQuery显示、隐藏div的几种方法简明总结
2015/04/16 Javascript
js点击按钮实现带遮罩层的弹出视频效果
2015/12/19 Javascript
js 动态添加元素(div、li、img等)及设置属性的方法
2016/07/19 Javascript
利用jQuery对无序列表排序的简单方法
2016/10/16 Javascript
angularjs实现多张图片上传并预览功能
2017/02/24 Javascript
JavaScript全屏和退出全屏事件总结(附代码)
2017/08/17 Javascript
JS删除数组里的某个元素方法
2018/02/03 Javascript
详解easyui 切换主题皮肤
2019/04/04 Javascript
vue2 v-model/v-text 中使用过滤器的方法示例
2019/05/09 Javascript
Vue+iview+webpack ie浏览器兼容简单处理
2019/09/20 Javascript
javascript canvas API内容整理
2020/02/16 Javascript
vue 导航守卫和axios拦截器有哪些区别
2020/12/19 Vue.js
python 解析html之BeautifulSoup
2009/07/07 Python
Python使用scrapy抓取网站sitemap信息的方法
2015/04/08 Python
python实现list元素按关键字相加减的方法示例
2017/06/09 Python
基于Python对象引用、可变性和垃圾回收详解
2017/08/21 Python
浅谈Python黑帽子取代netcat
2018/02/10 Python
python3.6使用pymysql连接Mysql数据库
2018/05/25 Python
mac下给python3安装requests库和scrapy库的实例
2018/06/13 Python
解决Django部署设置Debug=False时xadmin后台管理系统样式丢失
2020/04/07 Python
VSCode 自定义html5模板的实现
2019/12/05 HTML / CSS
Html5基于canvas实现电子签名并生成PDF文档
2020/12/07 HTML / CSS
意大利在线高尔夫商店:Online Golf
2021/03/09 全球购物
高中生操行评语
2014/04/25 职场文书
2015入党自传书范文
2015/06/26 职场文书
MYSQL优化之数据表碎片整理详解
2022/04/03 MySQL
Golang原生rpc(rpc服务端源码解读)
2022/04/07 Golang
Ruby GDBM操作简介及数据存储原理
2022/04/19 Ruby