10.2 Pandas 库

10.2 Pandas 库


Pandas 是基于Numpy 构建的,让以Numpy 为中心的应用变得更加简单。Pandas 提供了大量能使我们快速便捷地处理数据的函数和方法,这也是使Python 成为强大而高效的数据分析环境的重要因素之一。

Pandas 的数据结构主要有三种,分别是Series 、DataFrame 和Panel 。

Series 是一维数组,与Numpy 中的一维array 类似。二者与Python 基本的数据结构List 也很相近,其区别是: List 中的元素可以是不同的数据类型,而Array 和Series 中则只允许存储相同的数据类型,这样可以更有效地使用内存,提高运算效率。

DataFrarne 是二维数组,非常接近于Excel 电子表格或者类似MySQL数据库的形式。它的竖行称为列( colums ),横行称为index ,也就是说,数据的位置是通过columns 和index 来确定的。可以将DataFrarne 理解为Series 的容器。

Panel 是三维数组,可以理解为DataFrame 的容器。

10.2.1 一维数组Series

Series 是由一组数据(各种Numpy 数据类型) ,以及一组与之相关的标签数据(即索引)组成。仅由一组数据即可产生最简单的Series , 也可以通过传递一个list 对象来创建一个Series。需要注意的是, Pandas 会默认创建整型索引。

创建一个Python3 文件,然后输入代码如下:

10.2.2 二维数组DataFrame

DataFrame 是一个表格型的数据结构,它含有一组有序的列,每一列的数据结构都是相同的,而不同的列之间则可以是不同的数据结构(数值、字符、布尔值等)。或者以数据库进行类比, DataFrame 中的每一行是一个记录,名称为Index 的一个元素,而每一列则为一个字段,是这个记录的一个属性。DataFrame 既有行索引也有列索引,可以被看作由Series 组成的字典(共用同一个索引 )。

1. 创建DataFrame

创建一个Python3 文件,然后输入代码如下:

2. 查看数据

下面利用get_price( )函数获得股票数据,得到的数据是DataFrarne 对象。get_price( ) 函数的语法格式如下:

get_price(security , start_date=None , end_date=None ,frequency= ‘daily' , fields=None , skip_paused=False, fq= ‘pre' ,count=None)

get_price( )函数可以接天或者按分钟获取一只或者多只股票的行情数据,各项参数意义如下:

security :一只股票代码或者一只股票代码的list。

Start_date: 开始肘间,与参数count 二选一,不可同时使用。需要注意的是,如果参数count 和参数start_date 都没有设置,则start_date生效值是"2015-01-01"。如果取分钟数据肘,肘间可以精确到分钟,例如传入datetime.datetime (2015 , 1 , 1 , 10, 0 , 0)或者'2015-01-0110:00:00' 。


end_date: 结束时间,默认是"2015-12-31" ,包含此日期。需要注意的是,当取分钟数据时,如果end_date 只有日期,则曰内时间等同于00:00:00 ,所以返回的数据是不包括end_date 这一天的。

Frequency: 单位时间长度,几天或者几分钟,默认为daily ,即表示1天。现在支持"Xd" 、"x.m"、"daily" (表示1 天)、"minute" (表示1 分钟), X 是一个正整数,分别表示X 天和X 分钟。需要注意的是,当X>1时,fields 只支持[ "open" 、"close" 、high" 、"low" 、"volume" 、"money" ]这几个标准字段。

Fields :字符串list ,选择要获取的行情数据字段,默认是None (表示[ "open" 、"close" 、"high" 、"low" 、"volume" 、"money" ]这几个标准字段)。参数Fields 支持SecurityUnitData 里面的所有基本属性,包含:[ "open"、"close" 、"low" 、"high" 、"volume" 、"money" 、"factor" 、"high_limit" 、"low_limiit" 、"avg"、"pre_close"、"paused]

skip_paused :是否跳过不交易曰期(包括停牌、未上市或者退市后的日期,如果不跳过,停牌肘会使用停牌前的数据填充。上市前或者退市后数据都为nan。需要注意的是,该参数默认为False ,即不跳过不交易日期。如果当该参数是True 时,只能选取一只股票的信息。

Fq: 复权选工页。参数值设为'pre' ,表示前复权,为默认设置;参数值设为None ,表示不复权,返回实际价格;参数值设为'post' ,表示后复权。

Count :与start_date 二选一,不可同时使用。参数Count 表示数量,返回结果集的行数,即表示获取end_date 之前几个frequency 的数据。

创建一个Python3 文件,然后输入代码如下:

利用get_price( )函数获得中国宝安(000009 )每天的股票数据信息,开始时间是2018 年4 月3 日,结束时间是2018 年4 月20 日。默认情况下显示的数据信息是开盘价( open) 、收盘价( close )、最低价(low) 、最高价(high) 、成交量(volume) 、成交金额(money)。

单击工具栏中的运行按钮,运行结果如图10.13 所示。

只显示前5 条数据信息,可以利用head( )函数,代码如下:

dataframel . head( )

运行结果如图10.14所示。

只显示5条数据信息,可以用tail( )函数,代码如下:

detailframel.tail( )

运行解脱如图10.15所示。

3. 选择数据

只显示开盘价(open) 的数据信息,代码如下:

dataframel [ "open"]

注意这里是中括号,不是小括号。

运行结果如图10.16 所示。

显示开盘价(open) 、收盘价( close )和成交金额(money) 的数据信息,代码如下:

dataframel [[ "open" , "close" , "money"]]

运行结果如图10.17 所示。

显示第四条到第六条的数据信息,代码如下:

dat aframe1[3:6]

运行结果如图10. 18 所示。

使用标签选取数据, 语法格式如下:

dataframe1 . 1oc[ 行标签,列标签]

dataframe1 .1oc[ ‘a' : ‘b' ]         #选取a 行到b 行数据

dataframe1 . 1oc[ : , ‘open' ]    #选取open 列的数据

dataframe1 . 1oc的第一个参数是行标签,第二个参数为列标签( 可选参数,默认为所有列标签) ,两个参数既可以是列表也可以是单个字符,如果两个参数都为列表则返回的是DataFrame ,否则返回Series。

提醒loc 为location缩写。

显示2018 年4 月16 日的数据信息,代码如下:

dataframe1 . 1oc[ "2018-04-16"]

运行结果如图10.19 所示。

显示2018 年4 月16 日的收盘价,代码如下:

dataframe1.loc[ "2018-04-16" , "close"]

运行结果如图10.20 所示。

显示2018 年4 月16 日到2018 年4 月19 日的收盘价,代码如下:

dataframel.loc [ "2018-04-16" : "2018-04-19" , "close"]

运行结果如图10.21 所示。

显示所有的收盘价信息,代码如下:

dataframe1.loc[: , "close"]

运行结果如图10.22 所示。

使用位置选取数据,语法格式如下:

显示第三行和第四列的值,代码如下:

df.iloc[2 , 3]

运行结果如图10.23 所示。

更广义的切片方式是使用.ix ,它自动根据给到的索引类型判断是使用位置还是标签进行切片,语法格式如下:

dataframel.ix[1, 1]

dataframel.ix[ ‘a' :‘b']

显示第二行的开盘价,代码如下:

dataframe1.ix[1,‘open']

运行结果如图10.24 所示。

通过逻辐指针进行数据切片,语法格式如下:

df[ 逻辑条件]

df[df.one >= 2) #单个逻辑条件

df [ (df. one >=1 ) & (d f. one < 3) ] #多个逻辑条件组合

显示收盘价大于6.25 的数据信息,代码如下:

dataframe1[dataframe1.close>6.25]

运行结果如图10.25 所示。

显示收盘价大于6.25 并且成交量小于26000000 的数据信息,代码如下:

dataframe1 [(dataframe1.close>6.25) & (dataframe1.volume<26000000)]

运行结果如图10.26 所示。

使用条件更改数据。例如大于6.25 的数据都改为0 ,具体代码如下:

dataframe1[dataframe1>6.25]= 0

dataframe1

运行结果如图10.27 所示。

4. 数据的处理

利用函数mean( )计算列的平均值,具体代码如下:

dataframel.mean( )

运行结果如图10.28 所示。

利用函数mean( )计算行的平均值, 具体代码如下:

dataframel .mean(1)

运行结果如图10.29 所示。

10.2.3 三维数组Panel

获得股票数据get_price( )函数,如果获得的是多只股票的数据,则返回Panel 对象。可通过panel[列标,行标,股票代码]获取数据。

创建一个Python3 文件,然后输入代码如下:

由输出的结果可以看出:

列标(Items axis: close to volume)

行标(Major_axis axis: 2018-04-0300:00:00 to 2018-04-20 00:00:00)

股票代码(Minor_axis axis: 000001.XSHE to 000009.xSHE)

显示两只股票的收盘价信息,具体代码如下:

panell [ 'close' ,:,: ]

单击工具栏中的阅运行按钮,运行结果如图10.31 所示。

显示两只股票2018 年4 月16 曰的数据信息,具体代码如下:

panel1[: ,‘2018-04-16' ,:  ]

单击工具栏中的运行按钮,运行结果如图10.32 所示。

显示平安银行( 000001 )的数据信息,具体代码如下:

panell[: ,:, "000001.XSHE" ]