
panel+data+analysis
panel data:面板数据,来源于计量经济学
pandas是集成了numpy和matplotlib的
pandas的优点在于数据处理能力强、读取文件方便,并且封装了numpy和matplotlib的计算和画图
pandas有三个核心数据结构:dataFrame\panel\series
可以将DataFrame视为既有行索引、又有列索引的二维数组


dataFrame的显示效果是非常优秀的:

我们可以为数据添加索引:

解释一下上面创建行索引的过程,这是对字符串进行了格式化:


行索引参数名叫index,列索引叫columns
最终效果:

dataFrame极大地增加了数据的可读性


head属性返回前几行的数据用于预览(默认返回前5行,可以传入要返回的具体行数)
tail属性返回后几行的数据用于预览(默认1返回后5行)

重设索引:

如果不传入参数的话,默认将原索引变成普通列,然后创建一个新索引
如果将drop属性设置为true,则会将原索引删除:


例如:

注意上面我们是怎么创建dataFrame的:我们可以通过字典创建dataFrame,行索引就是从0开始

设置多个索引后求index得到的是multiIndex:

MultiIndex的结构可以存储三维数据

levels可以理解为分层的索引:第几个元素就表示第几层的索引。而names就是各层索引的名称
存储三维结构的容器

items -
axis 0,每个项目对应于内部包含的数据帧(DataFrame)。major_axis -
axis 1,它是每个数据帧(DataFrame)的索引(行)。minor_axis -
axis 2,它是每个数据帧(DataFrame)的列。
因为Panel中存储的数据类型是三维的,所以输出时不能直接获取数据,但是可以分层获取:

这是使用Item切入,同样可以使用major axis和minor axis切入:

Panel从版本0.20.0之后开始弃用Panel,推荐使用的是DataFrame上的MultiIndex方法来表示三维数据。例如下图,MultiIndex对三维数据的表示更加自然和直观:

带索引的一维数组

series有一个index和values:

创建series:


注意pandas读csv的时候就不会像numpy一样把标题也作为数据存入进来,而是直接把标题作为索引,这很好。此外还可以使用drop来去掉列

dataframe不能直接用行和列的index来索引,需要输入行列索引,必须先列后行。当然想用行和列的index也不是完全不行,可以使用iloc方法:

除此之外,还可以按名字进行索引:

还可以使用混合索引,行和列中一个用数字,一个用名字:

赋值的话,可以对列整体而不是单个元素进行赋值:


series也是一样的方式,但是更简单:


算术运算可以使用方法,也可以使用运算符



也可以用运算完的结果作为筛选的依据返回对应的行

多个条件时:

除了逻辑运算符外,还有逻辑运算函数:

可以使用data.describe()把常见的统计值都算出来

那些百分比的值是分位数:
分位数指的就是连续分布函数中的一个点,这个点对应概率p。若概率0<p<1,随机变量X或它的概率分布的分位数Za,是指满足条件p(X≤Za)=α的实数

p_change反映的是每一天相比于前一天的涨跌幅情况:

使用plot可以非常方便地画出图(需要导入matplotlib):


series画图上面已经有一个例子了:

对于dataFrame:

scatter:散点图
其他图型:


注意如果csv中第一行不是表头,读取进来之后会默认当成表头,可以在读取时用names传入真正的表头列表来加以修正
保存csv文件:

注意写入的不只是要保存的数据,还有行索引:

如果不想要行索引的话可以在写入时加入参数index=false,这样就不会写入了:

如果连这个列索引都不想要的话,可以传入参数header=false
同样,如要以追加模式写入的话,可以传入参数mode="a"
HDF(Hierarchical Data Format)指一种为存储和处理大容量科学数据设计的文件格式及相应库文件。HDF 最早由美国国家超级计算应用中心 NCSA 开发,目前在非盈利组织 HDF 小组维护下继续发展。当前流行的版本是 HDF5。HDF5 拥有一系列的优异特性,使其特别适合进行大量科学数据的存储和操作,如它支持非常多的数据类型,灵活,通用,跨平台,可扩展,高效的 I/O 性能,支持几乎无限量(高达 EB)的单文件存储等
在windows下文件后缀名是h5
hdf5是二进制文件,无法直接查看
读取hdf5需要先安装tables库
我们可以在一个hdf5文件中存储多个dataFrame,为每个dataFrame指定一个key,使用Key进行查询和读取

还可以通过设置不同的key多次保存一个文件
我们优先使用hdf5保存数据,原因如下:

我们需要将读取进来的json转换为标准的dataFrame格式

保存为json的方法参数也差不多:


isnull默认是对每个元素进行的,返回一个布尔dataFrame

df.dropna默认按行删除,也可以传入axis指定按列删除。还有inplace参数,如果设置为false的话就不会修改源数据,而是会返回一个修改后的数据

查看是否有缺失值
除此之外,还有以下观察是否有缺失值的方法:





实例如下:

自动分组的话会按照列的值均匀分组
注意我们使用了qcut之后返回的是一个分组,如果我们需要将分组结果保存到数据中,例如保存为one-hot编码,可以再使用get_dummies:

除此之外,我们还可以直接使用分组来查看各个组中的元素个数:

而如果我们想要自定义分组边界,可以使用自定义分组:


注意merge中的how可以填:

规则和SQL一样


里面的数字代表样本在对应分组中的个数
当然也可以对其进行标准化:

绘制如下:

对于这种总和为1的,图中堆叠起来更好看:

数据透视表(Pivot Table)是一种交互式的表,可以进行某些计算,如求和与计数等。所进行的计算与数据跟数据透视表中的排列有关。
之所以称为数据透视表,是因为可以动态地改变它们的版面布置,以便按照不同方式分析数据,也可以重新安排行号、列标和页字段。每一次改变版面布置时,数据透视表会立即按照新的布置重新计算数据。另外,如果原始数据发生更改,则可以更新数据透视表。
透视表可以更简单的完成上面的工作:


和数据库一样,分组之后可以进行聚合查询
原文:https://www.cnblogs.com/jiading/p/12801118.html