python 数据清洗- Pandas 库

1 Pandas 基础

1.1 Pandas 介绍

  • Pandas 基于 NumPy 基础上建立的程序库,常与NumPy 和 Matplotlib 一同使用

  • Pandas 主要特点:

    • 提供了便于操作的数据的操作类型
    • 提供很多分析函数、分析工具
  • 使用 cmd 或者 powershell 下载:

    PS C:\Users\Handsome Black>pip install pandas
    
  • Pandas 库的引用:

    import pandas as pd
    
  • Pandas 的意义

    • 为数据处理过程中处理那些消耗大量时间的“数据清洗(Data Munging)”任务提供了便捷
  • Pandas 库的理解

    • Pandas 提供两种数据类型:Seriers、DataFrame
      • Series 相当于一维数据
      • DataFrame 相当于二维或者更高维数据
    • Pandas 的各类操作均是基于这两种数据类型
      • 各类操作:基本操作、运算操作、特征类操作、关联类操作
  • NumPy 与 Pandas 的区别

    库名 NumPy Pandas
    数据类型类别 基础数据类型 拓展数据类型(基于 NumPy )
    数据的关注点 关注数据的结构表达 关注数据的应用表达
    关键点 维度:数据间的关系 数据与索引间的关系

    结构表达:数据之间的维度

    应用表达:怎样更有效使用数据进行提取、运算等

1.2 Series 类型介绍

  • series 类型:由一组数据及相关的数据索引组成
    image-20220123192601071

  • 示例:
    image-20220123193213992

  • 自动索引:如果不指定 index 参数,会自动创建一组索引

  • 自定义索引:如果使用 index 指定索引,index 是第二参数位可以省略参数名,直接输入索引值

  • 示例:
    image-20220123194107049

1.3 自动索引与自定义索引

  • 两种索引方式并存,但是不能混用,混用会返回异常
  • 这两种索引方式是 Pandas 的特征之一,后面的 DataFrame 类型也有
  • 示例:
    image-20220123202551876
    • 索引单个只会出现值,切片出现的仍然是 Pandas 类型
      • 理解:Series 类型本身是 index + values 组成,进行操作处理生成的是 Series 类型,如果只选择单个值,返回的就是值

1.4 DataFrame 类型介绍

  • DataFrame 类型由共用的相同索引的一组列组成
    image-20220124202145713
  • DataFrame 是一个表格型的数据类型,每列值类型可以不同
  • DataFrame 既有行索引、也有列索引
    • 行索引 :index;列索引:column
    • 纵向针对索引的轴:axis = 0:横向针对索引的轴:axis = 1image-20220124202646593
  • DataFrame 常用于表达二维数据,但可以表达多维数据

2 两种类型的创建与操作

2.1 Series 类型的创建

2.1.1 从标量值(一个值)创建

  • 使用标量值值创建 Series 类型,不能省略 index 参数
    • index 指定创建的数量
  • 示例:
    image-20220123195242396

2.1.2 从字典创建

  • 第一种:不指定 index
    • 创建出来的 Series 类型:键对应索引,字典的值对应Series 的值
    • 示例:
      image-20220123195913935
  • 第二种:指定 index
    • index 在字典中进行选择操作,用于定义形状('排序顺序'),对应索引无值使用 NaN 表示
    • 示例:
      image-20220123200206735

2.1.3 从 ndarray 数组创建

  • 示例:
    image-20220123200658493
    • 其中指定 index 是常见的创建方式

2.1.4 Series 类型创建总结

  • Series 类型可以由如下类型创建:
    • Python 列表,index 与列表元素个数一致
    • 标量值,index 表达 Series 类型的尺寸
    • Python 字典,键值对中的“键”是索引,index 从字典中进行选择操作
    • ndarray 数组,索引和数据都可以通过 ndarray 类型创建
    • 其他函数,range() 函数等
  • Series 类型具有极强的包容特点

2.2 Series 类型的基本操作

  • 总的来说:Series 基本操作方式类似 ndarray 和字典

2.2.1 获取 index 和 value

  • Series 类型包括 index 和 values 两部分
    • .index:获取索引,输出的类型为 Index 类型
    • .values :获取数据,输出的类型为 NumPy(array) 类型
    • 示例:
      image-20220123201649658

2.2.2 类似 ndarray 类型的操作

  • Series 类型的操作
    • 索引方法相同,采用 []
    • NumPy 中运算和操作可用于 Series 类型
    • 可以通过自定义索引的列表进行切片
    • 可以通过自动索引进行切片,如果存在自定义索引,则一同被切片
    • 示例:
      image-20220124164802473

2.2.3 类似 Python 字典类型的操作

  • 通过自定义索引访问
  • 保留字 in 操作
    • 在 Python 字典类型中 in 运算符用于判断键是否属于字典键列表
    • 在 Series 中 in 运算符用于判断一个数据是否存在于 Series 自定义索引列表(不会判断自动索引列表)
  • 使用 get() 方法
    • 获取某索引对应的值
  • 示例:
    image-20220123203732095

2.2.4 对齐操作

  • 形式:series + series
  • Series 类型在运算中会自动对齐不同索引的数据,相同索引进行运算,不同索引不会进行运算
  • 示例:
    ![image-20220124164444183](C:/Users/Handsome Black/AppData/Roaming/Typora/typora-user-images/image-20220124164444183.png)
  • NumPy 只关心数据维度,所以运行结果是维度的运算

2.2.5 获取 name 属性

  • Series 对象和索引都可以有一个名字,存储在属性 .name 中,开始未定义 name 属性没有返回值
  • 示例:
    image-20220124170105274

2.2.6 修改 series 类型

  • Series 对象的修改是是随时并且即可生效的
  • 示例:修改 name 属性
    image-20220124201510281

2.3 DataFrame 类型创建

2.3.1 由二维 ndarray 对象创建

  • 示例:
    image-20220124203320799
  • 纵向:行索引;横向列索引

2.3.2 从一维 ndarray 对象字典创建

  • 示例:
    image-20220124204419671
  • 同时数据会根据行列索引自动补齐
    • 示例:
      image-20220124204825579

2.3.3 由字典类型的字典创建

  • 除了字典类型的字典创建,还可以由列表、元组或 Series 构成的字典创建
  • 除了字典类型,还有字典构成的列表。这里就不展开了
  • 示例:
    image-20220124205312246

2.3.4 由表中数据创建

  • 由导入的文件来创建 DataFrame 类型

  • 下面以创建的数据,示意一下基本操作

  • 示例1:获取 index、column、value
    image-20220124210149240

    • 这些与 Series 基本相同
  • 示例2:获取行数据

    • loc:通过行标签索引行数据
    • iloc:通过行号索引行数据
    • image-20220125150303089

3 Pandas 运用

3.1 对数据类型的操作

  • 改变 Series 和 DataFrame 数据结构使用重新索引或者删除

    • 数据结构指增加、重排或删除
  • 重新索引

    • 使用 .reindex()改变或重排索引

    • 示例:
      image-20220125193853992

      image-20220125193912199

    • 常见参数:

      参数 说明
      index,columns 新的行列自定义索引
      fill_value 在重新索引中,用于填充缺失位置的值
      method 设置填充方法,ffill 向下自动填充,bfill 向上自动填充
      limit 最大填充量
      copy 默认 True,生成新的对象,False 时,新旧相等不复制
    • 示例:新增加一列数据,并填充数据
      image-20220125194659565

      • Series 和 DataFrame 的索引都是 Index 类型
        • Index 对象是不可修改类型
  • 索引类型的常用方法

    方法 说明
    append(idx) 连接另一个 Index 对象,产生新的 Index 对象
    diff(idx) 计算差集,产生新的 Index 对象
    intersection(idx) 计算交集
    union(idx) 计算并集
    delete(loc) 删除 loc 位置处的元素
    insert(loc,e) 在 loc 位置增加一个元素 e
    • 示例:增加一行数据
      image-20220125200056481
  • 删除指定索引对象

    • 使用drop()删除指定行或列索引
    • 示例:删除 Series 对象
      image-20220125200409428
    • 示例:删除 DataFrame 对象
      image-20220125200626474
      • 默认操作 0 轴上的元素,要操作 1 轴的元素需要指定

3.2 对数据类型的运算

  • 算术运算法则

    • 算术运算根据行列索引,补齐后运算,运算默认产生浮点数
    • 补齐时缺项填充 NaN (空值 )
    • 二维和一维、一维和零维间为广播运算
      • 广播运算:低维度会作用于高纬度的每一个元素
      • 一维的 Series 默认在轴 1 参与运算
    • 采用 +、‐、*、/符号进行的二元运算产生新的对象
      • 除了符号进行计算,还有方法形式进行计算
  • 方法形式的运算

    方法 说明
    add(d, **argws) 类型间加法运算,可选参数
    sub(d, **argws) 类型间减法运算,可选参数
    mul(d, **argws) 类型间乘法运算,可选参数
    div(d, **argws) 类型间除法运算,可选参数
    • 与符号形式相比可以增加一些参数,例如:fill_vlaue 替代 NaN
    • 示例:
      image-20220125201925234
  • 比较运算法则

    • 比较运算只能比较相同索引的元素,不进行补齐
    • 二维和一维、一维和零维间为广播运算
      • 同纬度运算,必须保持尺寸一致
      • 不同维度,默认在 1 轴
    • 采用 > < >= <= == !=等符号进行的二元运算产生布尔对象

3.3 数据的排序

3.3.1 对排序理解

  • 一组数据要表达一个或者多个含有,需要进行摘要处理,而摘要是一定会有损数据的image-20220125211403168
  • 摘要的第一步就是排序
  • Pandas 依据其特点提供了基于索引和数据两种排序方式
    • 其实对索引的操作就是对数据的操作
  • 当排序过程中存在 NaN 值,统一放在排序末尾

3.3.2 针对索引的排序方法

  • 使用 sort_index() 方法在指定轴上根据索引进行排序,默认升序

  • 语法格式:

    sort_index(axis=0,ascending=True)
    

    axis:针对 X 轴进行排序,默认 0 轴

    ascending:升序还是降序排列,默认 True 升序排列

  • 示例:
    image-20220125213154513

3.3.3 针对数据的排序方法

  • 使用 sort_values() 方法在指定轴上根据数值进行排序,默认升序

  • Series 语法格式:

    Series.sort_values(axis=0, ascending=True)
    

    axis:针对 X 轴进行排序,默认 0 轴

    ascending:升序还是降序排列,默认 True 升序排列

  • DataFrame 语法格式:

    DataFrame.sort_values(by, axis=0, ascending=True)
    

    by:根据 axis 轴上的某个索引或索引列表进行排序

    axis:针对 X 轴进行排序,默认 0 轴

    ascending:升序还是降序排列,默认 True 升序排列

  • 示例:Dataframe 降序排序

    image-20220125214826774

3.4 数据的统计分析

3.4.1 基本的统计分析函数

  • 适用于 Series 和 DataFrame 类型

    方法 说明
    sum() 计算数据的总和,按 0 轴计算,下同
    count() 非 NaN 值的数量
    mean()\median() 计算数据的算术平均值、算术中位数
    var()\std() 计算数据的方差、标准差
    min()\max() 计算数据的最小值、最大值
  • 适用于 Series 类型

    方法 说明
    argmin()\argmax() 计算数据最大值、最小值所在位置的索引位置(自动索引)
    idxmin()\idxmax() 计算数据最大值、最小值所在位置的索引(自定义索引)
    • 自动索引利于切片操作,二自定义索引不太利于切片操作
  • 统计汇总函数:describe()

    • 针对0轴(各列)的统计汇总,
    • 适用于 Series 和 DataFrame
    • 示例:
      image-20220125220630807
      • DataFrame 类似

3.4.2 累计统计分析函数

  • 累计统计即对前 \(n\) 个元素进行 \(1- n\) 的累计计算

  • 适用于 Series 和 DataFrame 类型

  • 常用的累计计算函数:

    方法 说明
    cumsum() 依次给出前1、2、…、n个数的和
    cumprod() 依次给出前1、2、…、n个数的积
    cummax() 依次给出前1、2、…、n个数的最大值
    cummin() 依次给出前1、2、…、n个数的最小值
  • 常用滚动计算(窗口计算)函数:

    • 根据选择的个数进行计算,未选中的不进行计算
    方法 说明
    rolling(w).sum() 依次计算相邻w个元素的和
    rolling(w).mean() 依次计算相邻w个元素的算术平均值
    rolling(w).var() 依次计算相邻w个元素的方差
    rolling(w).std() 依次计算相邻w个元素的标准
    rolling(w).min() rolling(w).max() 依次计算相邻w个元素的最小值和最大值
    • 示例:
      image-20220125221553037

3.5 数据的相关分析

  • 目前仅介绍一下基本概念

  • 相关性:假设有两个事物,表示为X和Y

    • X增大,Y增大,两个变量正相关
    • X增大,Y减小,两个变量负相关
    • X增大,Y无视,两个变量不相关
  • 度量相关性的表示常用方法:

    • 协方差公式:

      \[cov(X,Y)=\dfrac{\sum_{i=1}^n(X_i-\overline{X})(Y_i-\overline{Y})}{n-1} \]

      • 协方差>0, X 和 Y 正相关

      • 协方差<0, X 和 Y 负相关

      • 协方差=0, X 和 Y 独立无关

    • Pearson 相关系数

      • 公式:

        \[r = \dfrac{\sum^{n}_{i=1}(X_i-\overline{X})(Y_i-\overline{Y})}{\sqrt{\sum^{n}_{i=1}(x_i-\overline{x})^2}\sqrt{{\sum^{n}_{i=1}(Y_i-\overline{Y})^2}}}\qquad r\in[-1,1 \]

        • 0.8‐1.0 极强相关

        • 0.6‐0.8 强相关

        • 0.4‐0.6 中等程度相关

        • 0.2‐0.4 弱相关

        • 0.0‐0.2 极弱相关或无相关

  • 相关分析函数

    • 适用于 Series 和 DataFrame 类型
    方法 说明
    .cov() 计算协方差矩阵
    .corr() 计算相关系数矩阵, Pearson、Spearman、Kendall 等系数

4 文件存取

4.1 csv 文件读取

  • 读取CSV文件数据:read_csv() 函数

    • 语法格式:

      read_csv(filepath_or_buffer,sep,header,names,skiprows,na_values,encoding,nrows)
      

      filepath_or_buffer:字符串,表示文件路径

      sep:字符串,指定分割符,默认以逗号作为分隔符

      header:数值, 指定第几行作为列名(忽略注解行),如果没有指定列名,默认 header=0; 如果指定了列名 header=None

      names: 列表,指定列名,如果文件中不包含 header 的行,需要显性表示设置参数 header=None

      skiprows:需要忽略的行数(从0开始),设置的行数将不会进行读取,列表格式

      na_values:设置需要将值替换成 NaN 的值,Pandas 默认 NaN 为缺省,可以用来处理一些缺失、错误的数值。列表格式

      encoding:用于 unicode 的文本编码格式,字符串格式

  • 写入数据到csv文件

    • 数据写入csv文件使用:to_csv() 函数

    • 语法格式:

      to_csv(path_or_buf,sep,na_rep,columns,header,index)
      

      path_or_buf:字符串,文件名、文件具体、相对路径、文件流等;一定是DataFrame数据

      sep:文件分割符号,字符串类型

      na_rep:将 NaN 转换为特定值,字符串类型

      columns:选择部分列写入;如果需要传入全部数据,省略 columns 参数即可,列表类型

      header:默认为 None,写入时忽略列名

      index:默认为True,选择不写入索引,设置为 False

    • 写入数据时,文件如果是打开的情况,则需要关闭文件才能写进数据

posted @ 2021-10-27 09:30  你是我的生命之源  阅读(220)  评论(0)    收藏  举报
页脚