筛选功能(Pandas读书笔记9)

今天和大家分享如果使用Pandas实现单、多条件筛选、模糊筛选。

还是老套路,我们需要先读取一组数据作为测试文件。

测试文件使用读书笔记7的材料,传送门如下:

文件读取功能(Pandas读书笔记7)

分享筛选功能之前,我们先分享如何提取某一列,某一行

一、提取DataFrame数据的某一行

1、显示前N行

使用head函数

2、显示后N行

3、显示任意某一行

这里需要说明pandas数据是从0开始编号的,而我们原始数据是从1开始编号的。

所以使用ix函数的时候,我们输入的是ix[2],选择的是原始数据的第三行

4、显示任意中间行

特殊说明1:选取任意行除了ix函数,loc和iloc均可

特殊说明2:这里不像列表那里有左闭右开的限制。这里两个数字都是闭合的,案例中[7:11]则选取的是第8行至第12行(pandas从0开始编号)

二、提取任意列

1、按照列名提取单列

2、按照列名提取多列

三、提取任意行列数据

1、提取5至9行、列名字为名称的数据

2、提取5至9行、列名字为名称的数据(方法二)

3、提取5至9行、列名字为名称、最高的数据

四、单条件筛选

筛选其实就是将某列符合特殊条件的筛选出来,那我们先设立一个小目标!将涨跌额为正数的筛选出来!

如何判断?无外乎为大于小于等于判断咯!

df['涨跌额']是选出涨跌额这一列

我们看到使用判断后返回的是一个布尔型的数据,是一个TRUE和FALSE的集合体。

那我们如何将这个布尔型的数据实现筛选的功能呢?

我们将这个布尔型数据作为一个参数,外面套上原始数据和中括号即可!就实现了筛选功能。

原理就是布尔型数据为真的话,罗列出来!

五、筛选失败的解决方案

成功的道路总是相同的,不成功的道路各有各的不同,本环节其实才是本篇文章的精华之一,另一个精华就是模糊筛选~~

我们已经实现了根据涨跌额来实现筛选,那根据涨跌幅为正数进行筛选可以吗?

我们先试验一下!

错误提示字面理解就是大于号不能存在在文本和整型之间。

转义一下就是你的原始数据不能是字符串!

常见错误:原始数字使用文本形式存储

所以在这里和大家介绍一下如何强制文本转数字

上述两种方法均可!

细心的朋友肯定会说:“你框我!不是转化涨跌幅咩!怎么搞成涨跌额了!”

发现传统的文本转数字不管用哇!为虾米呢?这个文本转数字只适用于数字以文本形式存储的数据,不适用于本身只能用文本形式存储的数据。(略拗口,可以自己想想~)

由于原始数据带了一个%。所以带%的文本转数字是比较麻烦的~麻烦程度与Excel处理该类问题相同。

那如何解决呢?

df['涨跌幅'] = df['涨跌幅'].str.strip("%").astype(float)/100;

我们使用str.strip("%")函数将原始数据的百分号剔除,然后使用astype(float)将原始数据强制转化为浮点型数据,除以100,让原始数据保持不变;最后使用赋值将更改后的数据重新赋值给涨跌幅那一列。

然后就可以毫无压力的实现目标了!只不过将最初的百分比形式展示的改为了小数。

六、多条件筛选

1、且关系筛选

我们想要得到涨跌幅大于0,且成交量大于1000的数据。

首先涨跌幅大于0怎么表示呢?

df['涨跌幅']>0

成交量大于1000怎么表示呢?

df['成交量']>1000

错误总是那么相似,做个文本转数字吧

pd.to_numeric(df['成交量'])>1000

发现还不行,原来还有这个符号“-”,无法强制转化为数字!

事实证明,工作中的编程其实是处于发现问题,解决问题的过程~

那我们多增加一步,先把-替换掉

pd.to_numeric(df['成交量'].str.strip("-"))>1000

费了九年二虎之力,终于分别实现了不同列的判断条件。

如何把两列混合在一起呢?如何以且关系进行组合判断呢?

df[(df['涨跌幅'] >0)&(pd.to_numeric(df['成交量'].str.strip("-"))>1000)]

我们看一下代码的逻辑,单条件的代码逻辑如下:

变量[变量[列]符合什么条件]

简化就是 变量的中括号内接一个条件

那多条件如何表达呢?

变量[(条件1)&(条件2)&(条件N)]

多条件且关系筛选其实就是将不同条件用括号括起来后使用&字符连接~

2、或关系筛选

前面有了且关系的铺垫,或关系其实就是把&变更为 | 即可!

df[(df['涨跌幅'] >0)|(pd.to_numeric(df['成交量'].str.strip("-"))>1000)]

变量[(条件1)|(条件2)|(条件N)]

七、模糊筛选

模糊筛选想当年也浪费了我不少时间,我以为pandas会自带一个函数来的,结果是使用字符串的形式来实现的~

提问:我们将名称那一列含有“金”字的行提取出来~

Excel实现这个功能很简单,因为可以通过我最喜欢的通配符实现~

pandas只能使用字符串函数find函数,该函数用法与Excel相同~

解释一下这段代码

df[df['名称'].str.find("金", start=0, end=None)>=0]

最外层的df[ ]表示呈现整个表

df['名称'].str.find("金", start=0, end=None)>=0

将名称那一列使用字符串的find函数,如果find的返回值大于0,证明就是含有金字的,如果没有金字,返回值是-1,所以通过该方法可以判断哪行数据含有金字。

嗯嗯,很有才~~~

就这样了~ 感谢支持~

原文发布于微信公众号 - 阿凯的Excel(akexcel)

原文发表时间:2018-04-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IMWeb前端团队

简洁的javascript编码(一)--变量、函数

本文作者:IMWeb jaychen 原文出处:IMWeb社区 未经同意,禁止转载 ? 一、变量 使用语义化的变量名称 Bad cons...

2539
来自专栏Python

面向对象的三大特性(封装、继承、多态)

继承 什么是继承 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类 python中类...

1.9K9
来自专栏小樱的经验随笔

HUST 1588 辗转数对

1588 - 辗转数对 时间限制:1秒 内存限制:128兆 155 次提交 27 次通过 题目描述假设当前有一个数对(a, b),我们可以通过一步将这个数对...

3469
来自专栏Spark学习技巧

Flink DataStream编程指南

Flink程序是执行分布式集合转换(例如,filtering, mapping, updating state, joining, grouping, defi...

2K7
来自专栏小樱的经验随笔

51Nod 1182 完美字符串(字符串处理 贪心 Facebook Hacker Cup选拔)

1182 完美字符串 ?             题目来源:                         Facebook Hacker Cup选拔    ...

2967
来自专栏阿凯的Excel

让你眼花缭乱的匹配函数反查技巧

小编已经连续写了三期关于匹配函数的用法,匹配函数的扛把子(老大)肯定是Vlookup函数莫属,但是Vlookup函数有一个问题,就是要查找的内容,必须在查找内容...

3026
来自专栏数据结构与算法

洛谷P1043 数字游戏

题目描述 丁丁最近沉迷于一个数字游戏之中。这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易。游戏是这样的,在你面前...

3475
来自专栏chenjx85的技术专栏

leetcode-137-Single Number II-第二种解法

4.3K12
来自专栏Java爬坑系列

【JAVA零基础入门系列】Day3 Java基本数据类型

  前两篇已经将开发环境搭建完成,如果你已经按之前的教程按部就班的完成了部署,那么世界上最优秀的编程语言之一和世界上最优秀的IDE之一已经出现在你的电脑上(此处...

2278
来自专栏阿凯的Excel

文本数字拆分技巧

Excel处理人员呢,最喜欢的就是规范化的表,那什么样子的表是规范的呢?给大家个图片感受一下! ? 今天的要和大家分享的就是和规范化图表格格不入的,需要由不规...

3446

扫码关注云+社区

领取腾讯云代金券