文章目录

  • 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条件查询相关推荐

  1. Pandas简明教程:九、表的合并、连接、拼接(数据聚合基础)

    真实场景中常会遇到多种信息放在不同的表里的情况,此时我们就需要将这些表格的信息整合到一起.这种操作可以极大地减轻我们手动粘数据的工作,从而达到事半功倍的效果. 由于本篇要举的例子较多,因此直接采用官网 ...

  2. Pandas简明教程:八、Pandas数据透视表

    透视表(pivot)是由微软发明的一个概念,1993年微软注册了PivotTable这一商标,而他们又在2020年正式撤销了注册. 关于透视表的话题随便搜搜就是一大堆,而有些地方可能都吹得很神了.透视 ...

  3. Pandas简明教程-适用于竞赛、研究以及办公自动化

    数据的读.写.查.改是数据分析的基础,也是竞赛.研究以及办公自动化类项目的常用操作.为了让大家能以更简单的方法来操作数据,我们选择Pandas作为处理数据的工具,希望通过这个系列的教程能够帮助大家节省 ...

  4. Pandas简明教程:五、Pandas简单统计操作及通用方式

    文章目录 1.DataFrame的方法使用举例 2.DataFrame的方法调用通用方式 3.DataFrame直接调用其它方法 本系列教程教程完整目录: 前面已经提到,Pandas的DataFram ...

  5. Pandas简明教程:七、Pandas缺失数据的处理(数据清洗基础)

    文章目录 1.缺失数据的类型 2.定位缺失数据 3.修改定位数据 4.批量修改缺失数据 5.数据修复的利器--插值法(`interpolate`) 本系列教程教程完整目录: 数据清洗的内容其实很丰富, ...

  6. Pandas简明教程:三、Pandas文件读写

    文章目录 1.CSV文件 2.Excel的读写 3.HTML文件的读写 4.其它文件(数据)类型的简单说明 5.办公自动化问题简析 本系列教程教程完整目录: Pandas支持了非常丰富的文件类型(见文 ...

  7. Pandas简明教程:四、Pandas数据索引方式

    文章目录 1.以类似`dict`的方式访问 2.以属性方式访问数据 3.访问行(slicing) 4.用`loc`方法访问不同行列 5.用`iloc`方法直接访问行列 6.其它方式 本系列教程教程完整 ...

  8. Pandas简明教程:二、Pandas基本数据结构-DataFrame与Series

    文章目录 1.什么是表格? 2.DataFrame类型 3.Series类型 本系列教程教程完整目录: 1.什么是表格? 月份 姓名 性别 应发工资 实发工资 职位 0 1 张三 男 2000 150 ...

  9. Pandas简明教程:一、Pandas简介与安装

    文章目录 1.Pandas简介 2.为何要用Pandas? 3.知识.技能与环境的准备 4.Pandas的安装与相关辅助资料 本系列教程教程完整目录: 1.Pandas简介 关于Pandas的介绍在百 ...

最新文章

  1. php学数据结构,PHP 程序员学数据结构与算法之《栈》
  2. java中引导页面的,Android实现欢迎引导页面
  3. [Everyday Mathematics]20150203
  4. html图片轮播怎么做的,CSS3制作轮播图的一种方法
  5. Socket代码实现服务端 和 客户端之间通信
  6. python怎么添加按钮_在Python QProcess示例中添加按钮和单独的窗口
  7. Mondrian and OLAP
  8. 如何在Python中读取属性文件?
  9. 蓝桥杯2015年第六届C/C++省赛A组第八题-饮料换购
  10. Mybatis与hibernate
  11. Windows Phone 开发【MSDN参考文档 目录】
  12. 挂烫机UL认证怎么办理
  13. matplotlib堆积图
  14. 最小二乘法:求回归直线方程
  15. 第十章 搭建nRF52开发环境(SES)
  16. 谭浩强《C语言》学习1
  17. python中time什么意思_python中time包是什么?
  18. AI vs ML:有什么区别?
  19. 红米1联通版_标注:2013023_官方线刷包_救砖包_解账户锁
  20. qt中QPushbutton出现保持按下的效果并且出现一组中同时出现互斥的效果

热门文章

  1. go语言练习:幂、函授接收和返回参数、转义字符、变量和常量
  2. Linux如何查看进程、杀死进程、查看端口等常用命令
  3. 零元学Expression Blend 4 - Chapter 40 Flash做的到的Blend也可以!轻松制作拥有动画的MenuBar!(上)...
  4. C/C++ 对优先级与结合性的理解
  5. vue入门基础篇笔记1
  6. 转)SSO单点登录在互联网电商应用中的解决方案(基于CAS的改造)
  7. 清除DataTable中的空行记录
  8. SQL Server开发者Oracle快速入门
  9. python语言结构_Python语言表示语句结构时采用
  10. Unity_UIWidgets学习笔记03_组件_Container