zoukankan      html  css  js  c++  java
  • 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

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

  • 相关阅读:
    SQLServer中重建聚集索引之后会影响到非聚集索引的索引碎片吗
    设计表的时候,对于自增列做物理主键使用的一点思考
    MySQL慢查询日志相关的配置和使用。
    Python文件操作---合并文本文件内容
    浅析SQL Server在可序列化隔离级别下,防止幻读的范围锁的锁定问题
    从一个简单的约束看规范性的SQL脚本对数据库运维的影响
    (译)内存沉思:多个名称相关的神秘的SQL Server内存消耗者。
    初试Python语法小试牛刀之冒泡排序
    浅析MySQL中的Index Condition Pushdown (ICP 索引条件下推)和Multi-Range Read(MRR 索引多范围查找)查询优化
    MySQL执行计划extra中的using index 和 using where using index 的区别
  • 原文地址:https://www.cnblogs.com/jiading/p/12801118.html
Copyright © 2011-2022 走看看