Pandas学习笔记

Pandas学习笔记

简介

image-20200417232756110

panel+data+analysis

panel data:面板数据,来源于计量经济学

pandas是集成了numpy和matplotlib的

pandas的优点在于数据处理能力强、读取文件方便,并且封装了numpy和matplotlib的计算和画图

数据结构

pandas有三个核心数据结构:dataFramepanelseries

DataFrame

可以将DataFrame视为既有行索引、又有列索引的二维数组

image-20200417233531979

image-20200417233801495

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

image-20200417233830450

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

image-20200417233951889

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

image-20200417234309261

image-20200417234053194

行索引参数名叫index,列索引叫columns

最终效果:

image-20200417234400420

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

属性

image-20200417234508799

image-20200417234531292

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

tail属性返回后几行的数据用于预览(默认1返回后5行)

索引的设置

image-20200418004927560

重设索引:

image-20200418005140012

如果不传入参数的话,默认将原索引变成普通列,然后创建一个新索引

如果将drop属性设置为true,则会将原索引删除:

image-20200418005243646

image-20200418005317056

例如:

image-20200418005412292

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

image-20200418005525388

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

image-20200418012732926

MultiIndex

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

image-20200418012854723

levels可以理解为分层的索引:第几个元素就表示第几层的索引。而names就是各层索引的名称

Panel

存储三维结构的容器

image-20200418232559643

items - axis 0,每个项目对应于内部包含的数据帧(DataFrame)。

major_axis - axis 1,它是每个数据帧(DataFrame)的索引(行)。

minor_axis - axis 2,它是每个数据帧(DataFrame)的列。

因为Panel中存储的数据类型是三维的,所以输出时不能直接获取数据,但是可以分层获取:

image-20200418232850466

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

image-20200418233052780

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

image-20200418012854723

Series

带索引的一维数组

image-20200419002841276

series有一个index和values:

image-20200419002939072

创建series:

image-20200419003008983

基本数据操作

索引操作

image-20200419003300523

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

image-20200419003531041

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

image-20200419003900987

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

image-20200419003805735

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

image-20200419004056834

赋值操作

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

image-20200419004251217

排序操作

内容排序

image-20200419004545072

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

image-20200419004752861

索引排序

image-20200419004715260

运算

算术运算

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

image-20200419005017309

image-20200419005044007

逻辑运算

image-20200419005129307

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

image-20200419005209289

多个条件时:

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

统计运算

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

那些百分比的值是分位数:

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

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

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

自定义运算

画图

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

image-20200419010111917

对于dataFrame:

  • scatter:散点图

    其他图型:

文件读取和存储

csv文件

image-20200419214344581

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

保存csv文件:

image-20200419214707439

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

image-20200419214738416

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

image-20200419214846379

如果连这个列索引都不想要的话,可以传入参数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进行查询和读取

image-20200419215921874

还可以通过设置不同的key多次保存一个文件

我们优先使用hdf5保存数据,原因如下:

image-20200419220201065

json文件

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

image-20200419220347025

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

image-20200419220522029

处理缺失值

处理np.nan格式的缺失值

image-20200419223611381

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

image-20200419223248598

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

image-20200419223202637

查看是否有缺失值

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

image-20200419223341201

处理其他格式的缺失值

image-20200419223554242

数据离散化

image-20200419224518852

image-20200419224447320

image-20200419224709635

实例如下:

image-20200419224756152

自动分组的话会按照列的值均匀分组

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

image-20200419225025835

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

image-20200419225129189

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

image-20200419225211820

数据合并

image-20200419230434325

注意merge中的how可以填:

image-20200419230509176

规则和SQL一样

交叉表和透视表

交叉表

image-20200419230644454

image-20200419230743796

里面的数字代表样本在对应分组中的个数

当然也可以对其进行标准化:

image-20200419231120058

绘制如下:

image-20200419231141783

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

image-20200419231218520

透视表

数据透视表(Pivot Table)是一种交互式的表,可以进行某些计算,如求和与计数等。所进行的计算与数据跟数据透视表中的排列有关。

之所以称为数据透视表,是因为可以动态地改变它们的版面布置,以便按照不同方式分析数据,也可以重新安排行号、列标和页字段。每一次改变版面布置时,数据透视表会立即按照新的布置重新计算数据。另外,如果原始数据发生更改,则可以更新数据透视表。

透视表可以更简单的完成上面的工作:

image-20200419231542790

分组和聚合

image-20200419231818127

和数据库一样,分组之后可以进行聚合查询

原文地址:https://www.cnblogs.com/jiading/p/12801118.html