Hello pandas!

浏览: 1755

新手新篇

Hello pandas

碰到一些Python或者pandas的初学者,很多基础的语法和使用方法都还没有学会就开始打算用Tushare进行数据分析,毫无疑问会无从下手甚至开始怀疑人生直到放弃。

其实只要稍微花一点时间学习一下基础知识,就会变得豁然开朗,再深入学习后就得心应手了。

以下是一个用户发来的学习笔记(欢迎更多用户投稿~_~),从入门到精通,只差比别人少玩了几轮游戏。

写在前面

网上介绍python之pandas库非常多,这篇从sql语言的角度解读,相信更适合有sql语言(MySql)基础的你,像使用sql一样搞定pandas。

依然要说安装,本篇案例数据均取自tushare。

1、安装pandas,如果你安装的是anaconda,那么就不用单独安装了,因为anaconda已经集成了pandas。

2、安装tushare库

    Windows系统(win7及以上)

    a)打开Anaconda Prompt

    b)输入命令:pip install tushare

    c)按“Enter”键

安装tushare,如果你看过前篇《python数据处理之入门》,在“安装python”之“安装python库”章节亦可见。

还是那句话,最重要的是业务,python是帮你实现的工具。

创建表

对于mysql而言,要查看或处理其数据,首先数据肯定得是存储在某个表中,这个表是个二维的结构。

在mysql创建表的语句是create table ……

那么在pandas里,这种二维的数据结构是怎么呈现的呢?他叫DataFrame,创建一个DataFrame就相当于创建了一张表。

比如,在tushare返回的日行情数据(get_k_data)结果就是DataFrame。

上代码:

image.png

运行结果:

image.png

这个运行结果是不是超级熟悉?

说说索引

第1列,是不是类似你们经常看到的自增长ID,那么在DataFrame,他叫index(索引),这个索引非常重要,在将来的数据分析计算使用非常频繁。

所以,对于这个index,pandas也提供了一些函数满足你对他的要求,比如set_index,reset_index,举个set_index的例子,当我想使用date列作为索引的时候,请看下面截图代码:

image.png

运行结果:

image.png

字段

从上面截图可以一目了然的看到字段,对字段的操作,mysql有ALTER命名,那么对于pandas是什么样的呢,字段其实是个一维的结构,在pandas里面叫Series。

加个字段

我想加个字段,内容为”Boss出品”

image.png

这样这个新的字段就加上了,并且赋了值

请看执行结果:

image.png

删个字段

有字段我不想要,怎么办,简单哈,删字段呗,pandas提供了drop函数可以用来删字段,当日,也可以使用筛选filter,等等

比如,对于调出的数据结果,开高低价格用不上,那就去掉。

image.png

细心的你一定看到了axis这个参数,没错drop可以删除列,也可以对行进行删除。

执行结果:

我很懒,截个执行结果的图都不想干,咱们自己写代码,亲自执行看结果。

修改字段

Pandas不需要指定数据类型,那么就只剩下修改列名了。

你们想改哪个字段名,我想把date修改为trade_date。

image.png

执行结果:

懒!

数据查询

像写SQL一样,使用pandas


实现select

 

sql查询,select后面跟着的就是选字段,

pandas,哇!!!他更牛,不但可以根据列名来选,还能根据位置来选。

1、根据列名来选

filter,loc,at,ix,drop(drop是反向的,参见”删个字段”),以loc为例,at与loc相近。

image.png

另外,还有一种类似切片的方法,如下:

df2 = df[['date', 'code', 'close']]

2、根据位置来选

iloc,iat,ix

以iloc为例,iat与iloc相近

image.png

说说ix

细心的你们肯定又注意到了,根据列表和位置来选,都有ix。

ix,既能当loc用,又能当iloc用,兼有根据列名和位置筛选筛选两种功能

image.png

实现where

1、loc,iloc,at,iat,ix

使用位置过滤

还记得前面说过,pandas的index很常用吗,没错,在数据过滤查询里就会用到了。使用loc,iloc,at,iat,ix过滤,上述截图,大家注意到没有,无论是根据列名,还是根据位置选择列,在前面都有个冒号“:”

没错,这个就是用来做行筛选的,相当于mysql中的where

image.png

执行结果,在筛选的index范围内,不过你们注意没有,loc与iloc的过滤结果略微有些差异:

执行结果:

image.png

很明显,使用loc,包含了筛选使用的索引,而iloc没有。

这个是使用数字序列,如果使用日期作为索引,大家的感受可能会更深一些,

比如:

image.png

先设置了日期列作为索引,再使用loc对数据进行行列筛选。

--什么?

--执行什么?

--什么结果?

--结什么果?

算了,咱们敲一遍代码,自己执行看结果吧。

查询筛选

pandas对行的筛选必须要使用index(索引)吗?非也,非也,mysql里有的,pandas肯定能满足你,请继续往下看:

mysql里筛选使用的and,or,in,not in之pandas实现。

为了举例更方便,让大家更直观,我在tushare.get_k_data调了浦发银行、万科两只股票的行情。

image.png

代码运行后,就有了浦发银行、万科的日行情。

1、and之实现

筛选出浦发银行2018年1月11日的行情

使用符号“&”

image.png

2、or之实现

筛选收盘价大于35元,或浦发银行2018年1月11日的行情

使用符号“|”

image.png

3、 in之实现

筛选浦发银行、万科,2018年1月11日和12日两天的日行情

image.png

4、not in 之实现

筛选浦发银行、万科,不要2018年1月11日和12日这两天的日行情

image.png

另外,还可以使用query函数来构造筛选,如,筛选出浦发银行日行情:

image.png

order排序

对应mysql之order by

pandas有使用索引排序或使用列排序两种选择,分别是:sort_index, sort_values,使用参数ascending(True、False)来满足对升序或降序的要求,比如

1、使用索引,按降序排列

image.png

2、按收盘价,升序排列

image.png

参数ascending默认等于True升序排列,所以不用写了。

取n行

对应mysql之limit

pandas不但能取前n行,还提供函数可以取后n行,分别是head()、tail()

如,取前4行、后4行

image.png

MySql通常有先排序,再limit,pandas同样可以一行代码实现

image.png

去重

对应MySql之distinct

在数据查询中,通常会使用去重,对应的pandas函数是drop_duplicates,并且更前大的是drop_duplicates提供了参数keep,供你选择保留第1条,亦或是将重复数据全删除。

image.png

空值

对应MySql之Null

pandas有空日期pd.NaT,空值None,空值亦或称之为缺失值

1、缺失值筛选

MySql的筛选通常有where date is null,或is not null

pandas对应的筛选办法是

df = df[df['close'].isnull()]

df = df[df['close'].notnull()]

代码:

推荐 0
本文由 挖地兔 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册