详解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选择排序、冒泡排序、合并排序代码实例
Apr 10 Python
Django的数据模型访问多对多键值的方法
Jul 21 Python
Python使用requests发送POST请求实例代码
Jan 25 Python
python在线编译器的简单原理及简单实现代码
Feb 02 Python
Python线程池模块ThreadPoolExecutor用法分析
Dec 28 Python
不归路系列:Python入门之旅-一定要注意缩进!!!(推荐)
Apr 16 Python
Python GUI编程学习笔记之tkinter界面布局显示详解
Mar 30 Python
Python PIL库图片灰化处理
Apr 07 Python
如何卸载python插件
Jul 08 Python
Django利用elasticsearch(搜索引擎)实现搜索功能
Nov 26 Python
Python selenium的这三种等待方式一定要会!
Jun 10 Python
Python机器学习实战之k-近邻算法的实现
Nov 27 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/01/02 PHP
PHP setcookie指定domain参数后,在IE下设置cookie失效的解决方法
2011/09/09 PHP
php.ini中的request_order推荐设置
2015/05/10 PHP
PHP中类属性与类静态变量的访问方法示例
2016/07/13 PHP
PHP判断用户是否已经登录(跳转到不同页面或者执行不同动作)
2016/09/22 PHP
PHP钩子与简单分发方式实例分析
2017/09/04 PHP
简单实用的全选反选按钮例子
2013/10/18 Javascript
初识SmartJS - AOP三剑客
2014/06/08 Javascript
jQuery常用操作方法及常用函数总结
2014/06/19 Javascript
js中日期的加减法
2015/05/06 Javascript
JS Canvas定时器模拟动态加载动画
2016/09/17 Javascript
基于bootstrap-datetimepicker.js不支持IE8的快速解决方法
2016/11/07 Javascript
详解jQuery事件
2017/01/13 Javascript
JavaScript设置名字输入不合法的实现方法
2017/05/23 Javascript
vue按需引入element Transfer 穿梭框
2017/09/30 Javascript
详解如何使用node.js的开发框架express创建一个web应用
2018/12/20 Javascript
node错误处理与日志记录的实现
2018/12/24 Javascript
layui table 多行删除(id获取)的方法
2019/09/12 Javascript
解决vant框架做H5时踩过的坑(下拉刷新、上拉加载等)
2020/11/11 Javascript
深入解析Python中的集合类型操作符
2015/08/19 Python
Python如何获取系统iops示例代码
2016/09/06 Python
Python中格式化format()方法详解
2017/04/01 Python
python3跳出一个循环的实例操作
2020/08/18 Python
如何利用Python matplotlib绘制雷达图
2020/12/21 Python
python实现图片转字符画的完整代码
2021/02/21 Python
CSS3系列教程:背景图片(背景大小和多背景图) 应用说明
2012/12/19 HTML / CSS
亚马逊西班牙购物网站:amazon西班牙
2017/03/06 全球购物
一套C++笔试题面试题
2012/06/06 面试题
聚网科技C++面试笔试题
2015/09/01 面试题
售后服务承诺书
2014/03/26 职场文书
县级文明单位申报材料
2014/05/23 职场文书
业务员岗位职责
2015/02/03 职场文书
2015年物资管理工作总结
2015/05/20 职场文书
幼儿教师继续教育培训心得体会
2016/01/19 职场文书
标准演讲稿格式结尾应该怎么书写?
2019/07/17 职场文书
基于Redis的List实现特价商品列表功能
2021/08/30 Redis