Pandas简明教程:六、Pandas条件查询
文章目录
- 1、基本方法
- 2、高级查询
- 3、 可用于修改内容的`where`方法
- 4、条件检索进阶:快速的查询方法`query`
- 5、其它检索方法简述
- 本系列教程教程完整目录:
目前大家公认的一个说法是:Python的用户主要集中在数据分析和机器学习这两类人群。数据分析人员之所以喜欢用它就是因为Python的各种数据处理工具的查询检索方式都非常简单易用。这篇教程就主要介绍Pandas的数据查询方法,借此可以感受一下Pandas的便利。
1、基本方法
首先,数据仍然用我们一直以来用的张三团伙表。
df月份 姓名 性别 应发工资 实发工资 职位
0 1 张三 男 2000 1500 主犯
1 2 张三 男 2000 1000 主犯
2 3 张三 女 2000 15000 主犯
3 4 张三 女 2000 1500 主犯
4 5 张三 女 2000 1500 主犯
5 2 李四 男 1800 1300 从犯
6 3 李四 男 1800 1300 从犯
7 4 李四 男 1800 1300 从犯
8 5 李四 男 1800 1300 从犯
9 1 王五 女 1800 1300 龙套
10 2 王五 女 1800 1300 龙套
11 3 王五 女 1800 1300 龙套
12 4 王五 女 1800 1300 龙套
比如此时我们只想查看性别为男的人员信息:(等式条件)
df[df['性别'] == '男']月份 姓名 性别 应发工资 实发工资 职位
0 1 张三 男 2000 1500 主犯
1 2 张三 男 2000 1000 主犯
5 2 李四 男 1800 1300 从犯
6 3 李四 男 1800 1300 从犯
7 4 李四 男 1800 1300 从犯
或者工资大于2000的信息:(不等式条件)
df[df['实发工资']>2000]月份 姓名 性别 应发工资 实发工资 职位
2 3 张三 女 2000 15000 主犯
或者所有人员中实发工资大于1400且性别为男的信息:(多条件)
df[(df['实发工资']>1000) & (df['性别'] == '男')]月份 姓名 性别 应发工资 实发工资 职位
0 1 张三 男 2000 1500 主犯
5 2 李四 男 1800 1300 从犯
6 3 李四 男 1800 1300 从犯
7 4 李四 男 1800 1300 从犯
8 5 李四 男 1800 1300 从犯
这里简单小结一下,基本的查询规则即是在df
后加入查询条件,而这个条件可以是df
任意位置的数据。 明白这一点之后,其实就很容易理解其条件查询功能了。
2、高级查询
比如我想找到所有姓张的人的信息:
df[[x.startswith('张') for x in df['姓名']]]月份 姓名 性别 应发工资 实发工资 职位
0 1 张三 男 2000 1500 主犯
1 2 张三 男 2000 1000 主犯
2 3 张三 女 2000 15000 主犯
3 4 张三 女 2000 1500 主犯
4 5 张三 女 2000 1500 主犯
这里
stratswith
方法是Python自带的字符串方法,点这里查看详细说明。
还有一种方法:
criterion = df['姓名'].map(lambda x: x.startswith('张'))df[criterion]月份 姓名 性别 应发工资 实发工资 职位
0 1 张三 男 2000 1500 主犯
1 2 张三 男 2000 1000 主犯
2 3 张三 女 2000 15000 主犯
3 4 张三 女 2000 1500 主犯
4 5 张三 女 2000 1500 主犯
官方称第二种方法更快,我们来测试一下:
# 第一种方法
%timeit df[[x.startswith('张') for x in df['姓名']]]
203 µs ± 8.92 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)# 第二种方法
%timeit criterion = df['姓名'].map(lambda x: x.startswith('张'))
93.2 µs ± 6.21 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)%timeit df[criterion]
201 µs ± 2.44 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
可以看到,第二种方法实际上并没有明显快多少。并且如果加上添加检索规则的时间反而更慢。
很明显作者只考虑了检索的时间,并没有计算制定规则的时间。所以在具体使用时还是需要自己多做一些测试。(这也就是免费工具的不好之处)。
类似地,还可以利用上述方式实现更为复杂的查询。
3、 可用于修改内容的where
方法
先看用法:
df.where(df['性别'] == '男')月份 姓名 性别 应发工资 实发工资 职位
0 1.0 张三 男 2000.0 1500.0 主犯
1 2.0 张三 男 2000.0 1000.0 主犯
2 NaN NaN NaN NaN NaN NaN
3 NaN NaN NaN NaN NaN NaN
4 NaN NaN NaN NaN NaN NaN
5 2.0 李四 男 1800.0 1300.0 从犯
6 3.0 李四 男 1800.0 1300.0 从犯
7 4.0 李四 男 1800.0 1300.0 从犯
8 5.0 李四 男 1800.0 1300.0 从犯
9 NaN NaN NaN NaN NaN NaN
10 NaN NaN NaN NaN NaN NaN
11 NaN NaN NaN NaN NaN NaN
12 NaN NaN NaN NaN NaN NaN
这里where
的使用和直接访问标签的方式就有所不同了,这是将所有满足条件的项保持原状,而其它项全部设为NaN。如果要替换数据的话,需要比较复杂的表达式,这里只看一个简单的例子:
dates = pd.date_range('1/1/2000', periods=8)df = pd.DataFrame(np.random.randn(8, 4),index=dates, columns=['A', 'B', 'C', 'D'])df.where(df < 0, -df)A B C D
2000-01-01 -2.843891 -0.140803 -1.816075 -0.248443
2000-01-02 -0.195239 -1.014760 -0.621017 -0.308201
2000-01-03 -0.773316 -0.411646 -1.091336 -0.486160
2000-01-04 -1.753884 -0.596536 -0.273482 -0.685287
2000-01-05 -1.125159 -0.549449 -0.275434 -0.861960
2000-01-06 -1.059645 -1.600819 -0.085352 -0.406073
2000-01-07 -1.692449 -1.767384 -0.266578 -0.593165
2000-01-08 -0.163517 -1.645777 -1.509307 -0.637490
这里插一句:实际上numpy也有
where
方法,用法类似,可参考:Python Numpy中返回下标操作函数-节约时间的利器
4、条件检索进阶:快速的查询方法query
df.query('姓名>性别')月份 姓名 性别 应发工资 实发工资 职位
2 3 张三 女 2000 15000 主犯
3 4 张三 女 2000 1500 主犯
4 5 张三 女 2000 1500 主犯
9 1 王五 女 1800 1300 龙套
10 2 王五 女 1800 1300 龙套
11 3 王五 女 1800 1300 龙套
12 4 王五 女 1800 1300 龙套
这里,字符串的比较可以查看Python的字符串比较。当然,这里可以看到,query
方法主要还是用于列的比较。
5、其它检索方法简述
除了上述方法之外,还有:
query
方法的条件处理
MultiIndex
情况下的处理
get
方法
lookup
方法等等
本系列教程教程完整目录:
一、Pandas简介与安装
二、Pandas基本数据结构-DataFrame与Series
三、Pandas文件读写
四、Pandas数据索引方式
五、Pandas简单统计操作及通用方式
六、Pandas条件查询
七、Pandas缺失数据的处理(数据清洗基础)
八、Pandas数据透视表
九、表的合并、连接、拼接(数据聚合基础)
Pandas简明教程:六、Pandas条件查询相关推荐
- Pandas简明教程:九、表的合并、连接、拼接(数据聚合基础)
真实场景中常会遇到多种信息放在不同的表里的情况,此时我们就需要将这些表格的信息整合到一起.这种操作可以极大地减轻我们手动粘数据的工作,从而达到事半功倍的效果. 由于本篇要举的例子较多,因此直接采用官网 ...
- Pandas简明教程:八、Pandas数据透视表
透视表(pivot)是由微软发明的一个概念,1993年微软注册了PivotTable这一商标,而他们又在2020年正式撤销了注册. 关于透视表的话题随便搜搜就是一大堆,而有些地方可能都吹得很神了.透视 ...
- Pandas简明教程-适用于竞赛、研究以及办公自动化
数据的读.写.查.改是数据分析的基础,也是竞赛.研究以及办公自动化类项目的常用操作.为了让大家能以更简单的方法来操作数据,我们选择Pandas作为处理数据的工具,希望通过这个系列的教程能够帮助大家节省 ...
- Pandas简明教程:五、Pandas简单统计操作及通用方式
文章目录 1.DataFrame的方法使用举例 2.DataFrame的方法调用通用方式 3.DataFrame直接调用其它方法 本系列教程教程完整目录: 前面已经提到,Pandas的DataFram ...
- Pandas简明教程:七、Pandas缺失数据的处理(数据清洗基础)
文章目录 1.缺失数据的类型 2.定位缺失数据 3.修改定位数据 4.批量修改缺失数据 5.数据修复的利器--插值法(`interpolate`) 本系列教程教程完整目录: 数据清洗的内容其实很丰富, ...
- Pandas简明教程:三、Pandas文件读写
文章目录 1.CSV文件 2.Excel的读写 3.HTML文件的读写 4.其它文件(数据)类型的简单说明 5.办公自动化问题简析 本系列教程教程完整目录: Pandas支持了非常丰富的文件类型(见文 ...
- Pandas简明教程:四、Pandas数据索引方式
文章目录 1.以类似`dict`的方式访问 2.以属性方式访问数据 3.访问行(slicing) 4.用`loc`方法访问不同行列 5.用`iloc`方法直接访问行列 6.其它方式 本系列教程教程完整 ...
- Pandas简明教程:二、Pandas基本数据结构-DataFrame与Series
文章目录 1.什么是表格? 2.DataFrame类型 3.Series类型 本系列教程教程完整目录: 1.什么是表格? 月份 姓名 性别 应发工资 实发工资 职位 0 1 张三 男 2000 150 ...
- Pandas简明教程:一、Pandas简介与安装
文章目录 1.Pandas简介 2.为何要用Pandas? 3.知识.技能与环境的准备 4.Pandas的安装与相关辅助资料 本系列教程教程完整目录: 1.Pandas简介 关于Pandas的介绍在百 ...
最新文章
- php学数据结构,PHP 程序员学数据结构与算法之《栈》
- java中引导页面的,Android实现欢迎引导页面
- [Everyday Mathematics]20150203
- html图片轮播怎么做的,CSS3制作轮播图的一种方法
- Socket代码实现服务端 和 客户端之间通信
- python怎么添加按钮_在Python QProcess示例中添加按钮和单独的窗口
- Mondrian and OLAP
- 如何在Python中读取属性文件?
- 蓝桥杯2015年第六届C/C++省赛A组第八题-饮料换购
- Mybatis与hibernate
- Windows Phone 开发【MSDN参考文档 目录】
- 挂烫机UL认证怎么办理
- matplotlib堆积图
- 最小二乘法:求回归直线方程
- 第十章 搭建nRF52开发环境(SES)
- 谭浩强《C语言》学习1
- python中time什么意思_python中time包是什么?
- AI vs ML:有什么区别?
- 红米1联通版_标注:2013023_官方线刷包_救砖包_解账户锁
- qt中QPushbutton出现保持按下的效果并且出现一组中同时出现互斥的效果
热门文章
- go语言练习:幂、函授接收和返回参数、转义字符、变量和常量
- Linux如何查看进程、杀死进程、查看端口等常用命令
- 零元学Expression Blend 4 - Chapter 40 Flash做的到的Blend也可以!轻松制作拥有动画的MenuBar!(上)...
- C/C++ 对优先级与结合性的理解
- vue入门基础篇笔记1
- 转)SSO单点登录在互联网电商应用中的解决方案(基于CAS的改造)
- 清除DataTable中的空行记录
- SQL Server开发者Oracle快速入门
- python语言结构_Python语言表示语句结构时采用
- Unity_UIWidgets学习笔记03_组件_Container