Pandas学习笔记
Pandas学习笔记
简介
panel+data+analysis
panel data:面板数据,来源于计量经济学
pandas是集成了numpy和matplotlib的
pandas的优点在于数据处理能力强、读取文件方便,并且封装了numpy和matplotlib的计算和画图
数据结构
pandas有三个核心数据结构:dataFrame\panel\series
DataFrame
可以将DataFrame视为既有行索引、又有列索引的二维数组
dataFrame的显示效果是非常优秀的:
我们可以为数据添加索引:
解释一下上面创建行索引的过程,这是对字符串进行了格式化:
行索引参数名叫index,列索引叫columns
最终效果:
dataFrame极大地增加了数据的可读性
属性
head属性返回前几行的数据用于预览(默认返回前5行,可以传入要返回的具体行数)
tail属性返回后几行的数据用于预览(默认1返回后5行)
索引的设置
重设索引:
如果不传入参数的话,默认将原索引变成普通列,然后创建一个新索引
如果将drop属性设置为true,则会将原索引删除:
例如:
注意上面我们是怎么创建dataFrame的:我们可以通过字典创建dataFrame,行索引就是从0开始
设置多个索引后求index得到的是multiIndex:
MultiIndex
MultiIndex的结构可以存储三维数据
levels可以理解为分层的索引:第几个元素就表示第几层的索引。而names就是各层索引的名称
Panel
存储三维结构的容器
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
带索引的一维数组
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文件
注意如果csv中第一行不是表头,读取进来之后会默认当成表头,可以在读取时用names传入真正的表头列表来加以修正
保存csv文件:
注意写入的不只是要保存的数据,还有行索引:
如果不想要行索引的话可以在写入时加入参数index=false,这样就不会写入了:
如果连这个列索引都不想要的话,可以传入参数header=false
同样,如要以追加模式写入的话,可以传入参数mode="a"
hdf5文件
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文件
我们需要将读取进来的json转换为标准的dataFrame格式
保存为json的方法参数也差不多:
处理缺失值
处理np.nan格式的缺失值
isnull默认是对每个元素进行的,返回一个布尔dataFrame
df.dropna默认按行删除,也可以传入axis指定按列删除。还有inplace参数,如果设置为false的话就不会修改源数据,而是会返回一个修改后的数据
查看是否有缺失值
除此之外,还有以下观察是否有缺失值的方法:
处理其他格式的缺失值
数据离散化
实例如下:
自动分组的话会按照列的值均匀分组
注意我们使用了qcut之后返回的是一个分组,如果我们需要将分组结果保存到数据中,例如保存为one-hot编码,可以再使用get_dummies:
除此之外,我们还可以直接使用分组来查看各个组中的元素个数:
而如果我们想要自定义分组边界,可以使用自定义分组:
数据合并
注意merge中的how可以填:
规则和SQL一样
交叉表和透视表
交叉表
里面的数字代表样本在对应分组中的个数
当然也可以对其进行标准化:
绘制如下:
对于这种总和为1的,图中堆叠起来更好看:
透视表
数据透视表(Pivot Table)是一种交互式的表,可以进行某些计算,如求和与计数等。所进行的计算与数据跟数据透视表中的排列有关。
之所以称为数据透视表,是因为可以动态地改变它们的版面布置,以便按照不同方式分析数据,也可以重新安排行号、列标和页字段。每一次改变版面布置时,数据透视表会立即按照新的布置重新计算数据。另外,如果原始数据发生更改,则可以更新数据透视表。
透视表可以更简单的完成上面的工作:
分组和聚合
和数据库一样,分组之后可以进行聚合查询