专栏首页阿凯的Excel筛选功能(Pandas读书笔记9)

筛选功能(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)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 自定义单元格格式(判断版)

    前两期分别介绍了自定义单元格格式的数字版、文本版。本期将分享最后一个内容,自定义单元格格式的条件判断。同时也会分享一些比较偏,比较少用的应用! 一、基础知识分...

    用户1332619
  • Read_CSV参数详解

    pandas.read_csv参数详解 pandas.read_csv参数整理 读取CSV(逗号分割)文件到DataFrame 也支持文件的部分导入和选择迭代 ...

    用户1332619
  • Excel最强功能来袭!

    当你面对姓名电话拆分电话的时候,你会怎么做? 是Right函数? ? 还是智能填充? ? 抑或这样? ? 或者这样? ? 当你想要把人员信息按照部门进行拆...

    用户1332619
  • Pandas模块,我觉得掌握这些就够用了!

    经常会有一些朋友问我类似的问题,“哎呀,这个数据该怎么处理啊,我希望结果是这样的,麻烦刘老师帮我看看。”、“刘老师,怎么把一列数据拆分出来,并取出最后一个拆分结...

    数据森麟
  • Pandas模块,我觉得掌握这些就够用了!

    经常会有一些朋友问我类似的问题,“哎呀,这个数据该怎么处理啊,我希望结果是这样的,麻烦刘老师帮我看看。”、“刘老师,怎么把一列数据拆分出来,并取出最后一个拆分结...

    1480
  • pandas在Series中的时间日期(datetime64)类型怎么取出年月日并进行判断。

    lop
  • css实现视差滚动效果

    今天逛京东金融的时候发现他家网站首页的滚动效果看着很有意思,于是就做了一个,demo链接http://1.liwenyang.applinzi.com/inde...

    李文杨
  • java泛型理解。代码更明了。

    在工作中,相对于现有的项目源码的数据库操作层,无论是mybatis,hibernate或者是自己封装的baseModel层,都会使用到泛型。

    陈灬大灬海
  • SDNLAB技术分享(八):Neutron的基本原理与代码实现

    一、Openstack网络基础 下面对Openstack和Neutron的介绍,要从几个关键词入手。 1. 三代网络 在网络这一口,OpenStack经历了由n...

    SDNLAB
  • Normalization vs Standardization:规范化与标准化

    标准化、规范化以及正则化是机器学习中三个常用的数据处理方法,其中标准化和规范化解决不同单位和比例的数据间的差异,用于数据缩放;而正则化主要解决模型的过拟合问题。...

    深度学习与Python

扫码关注云+社区

领取腾讯云代金券