用pandas进行数据筛选基金数据实操

北京白癜风的最好医院 https://myyk.familydoctor.com.cn/2831/detail/

大家好,欢迎收看思路实验室出品的Python入门教程,我是室长。

在上一期我们把数据洗白白了之后,我们就可以进行数据筛选的操作了。

数据筛选是数据分析的重要环节。在数据量比较小的情况下,我们使用excel进行数据筛选是没有问题的,也许大多数人也已经习惯了使用excel进行筛选。但是一旦数据列数变多、筛选条件变多,excel的筛选功能就变得不那么直观了。如果我们需要按照计算出来的数据作为条件进行筛选就变得更加困难。特别是当你想复制一下筛选后的数据,还不能直接框选然后ctrl+c,这就非常的反直觉。

但是在pandas中,这一切都将变得非常直观便捷。

之前我们自己随便写的数据毕竟太单薄了,没有什么展示性。这一次室长采用了一些神秘手段获取了今天支基金的基本数据,让我们对这些数据做一些分析吧。(基金数据只作展示使用,不代表任何理财意见。最近的行情大家还是收敛点吧……)

数据和标签都已经存到同一个文件夹下的data.py里,我们可以直接导入:

可以看到数据已经完全导入了,行21列,这在excel中就是一个比较恐怖的体量了。

为了让数据行列的首尾都能打印在一个屏幕中,pandas自动帮我们省略了中间的行和列。不过如果要展示出来的话我们需要添加两行代码:

但是这样也有可能会导致代码打印不全,所以还是要酌情使用。

由于是使用了神秘手段,有些列的内容是什么含义我们是不知道的。所以我们先丢弃一部分列,赶快回忆一下丢弃列是怎么操作的:

这下简单的整理就完成了,我们可以正式地开始筛选了。

筛选数据最常用的还是loc方法。loc方法不光能够接受行列标签的输入,还能接受条件判断的表达式。比如筛选表格里赎回状态是开放赎回的条目:

可以看到筛选出了条对应的数据。

但是这个表达式并不是python中的判断表达式,返回的不是bool值。我们可以打印一下这个表达式,看看会返回什么结果:

是一个由行标签和bool值组成的Series。如果这个行标签的bool值为True,那么就会被loc方法选上,反之则会被排除。

既然不是python的判断表达式,有些使用方法还是有差异的。比如and、or、is、not、in等关键词就都不太好使。其实数据筛选并不需要那么复杂的判断,大于小于等于不等于这些符号和python的判断表达式是完全一样的,剩下的就是用来连接多个条件的与和或。分别可以使用

和连接判断条件,比如我们筛选一下既开放申购又开放赎回的。这里因为列太多显示不完全,但是我们仍然可以通过向loc方法输入列标签来选取我们想要看到的列,就像这样:

通过判断条件的连接,我们可以非常精细地筛选到我们需要的数据,而且筛选条件都在代码中记录着,易于我们查看。

有些时候判断条件是需要经过计算得出的,这时我们就可以将计算公式填入判断表达式。pandas内置了许多非常实用的方法,可以快速地计算出一列信息的相关数据。特别是describe方法,对于字符串类信息,可以将有效数据的数量、种类、出现最多的数据及其出现次数进行统计。

我们可以来看一下申赎状态都有哪些信息:

可以看到,各个有效数据都有条,其中申购状态总共有6种数据,赎回状态有5种。申购状态最多的是开放申购,有条,赎回状态最多的是开放赎回,有条。

对于数值类信息,describe方法可以将最大值、最小值、平均值、标准差、计数等内容全部显示出来。

我们希望用日增长值来举例,但是这一列数据还有些不完整,因为有些申赎状态异常的基金是没有日增长值的,我们需要排除掉这一部分:

我们把排除后的表格存入df1:

筛选出了条数据。

另外由于我们使用了神秘手段,获取的数据其实全是字符串格式的,我们需要把日增长值转换为浮点数。我们可以使用astype方法。注意astype方法没有inplace参数,需要将这个字段重新赋值:

有个警告信息,不过没关系,数据类型已经转换过来了。那我们现在来试一下describe方法:

可以看到,数据总数、平均值、标准差、最大最小值、分位数都清清楚楚地列出来了并生成了一个Series。

另外,我们还可以使用不同的方法获取一些具体的数值:

我们来求一下日增长值99%的分位数。这个数值意味着超过了99%的其他基金的日增长值:

现在分位数计算好了,我们可以把它代入判断条件,筛选出来日增长值前1%的基金:

筛选出了条数据。

不过这时我们发现日增长值并没有按照从大到小的顺序进行排列,这时候我们可以使用sort_values方法对其进行排列:

这里by参数可以填写一个或多个列标签,多个列标签的话会按照列标签的顺序进行多轮的排序。ascending参数填写bool值或bool值的列表,为True则是升序排列,为False则是降序排列。要注意bool值的个数需要与列标签的个数对应上:

现在日增长值是按照从大到小的顺序进行排列的了。

这些数据对我们来说可能还是太多,有时候我们最关心前几条数据或后几条数据。使用iloc方法并非不可以,但我们还可以使用head方法和tail方法,它们比iloc方法更加简洁和直观:

至此,一个简单的数据筛选流程就完成了。

我们不妨比较一下pandas和excel在数据筛选操作上的区别。excel的好处是对单个数据的修改非常方便,在需要手动进行判断的情况下操作起来要比pandas简单。但使用pandas进行多列、多条件筛选更为直观和轻松。而且将筛选后的数据进行导出也非常方便,在excel中想要在几万行几十列的数据中选取需要的几行几列并整合成一个紧凑的表格还是有些困难的。此外在excel中进行判断筛选往往需要在一个单元格中输入一长串的公式,而且公式里的参数并不是行标签列标签,而是单元格索引,阅读起来相当费眼费脑。

所以,当需要处理大量数据的时候,尝试使用pandas吧!你可以体验到飞一般的感觉!如果这篇文章对你有所帮助,希望能帮室长点个赞和在看,你的鼓励是室长进步的动力!

Tips:在这期中解释器出现了警告信息,很烦人。我们可以用这两条命令让警告不再弹出来:




转载请注明:http://www.aierlanlan.com/cyrz/2666.html