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 的各类操作均是基于这两种数据类型
- 各类操作:基本操作、运算操作、特征类操作、关联类操作
- Pandas 提供两种数据类型:Seriers、DataFrame
-
NumPy 与 Pandas 的区别
库名 NumPy Pandas 数据类型类别 基础数据类型 拓展数据类型(基于 NumPy ) 数据的关注点 关注数据的结构表达 关注数据的应用表达 关键点 维度:数据间的关系 数据与索引间的关系 结构表达:数据之间的维度
应用表达:怎样更有效使用数据进行提取、运算等
1.2 Series 类型介绍
-
series 类型:由一组数据及相关的数据索引组成

-
示例:

-
自动索引:如果不指定 index 参数,会自动创建一组索引
-
自定义索引:如果使用 index 指定索引,index 是第二参数位可以省略参数名,直接输入索引值
-
示例:

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

- DataFrame 是一个表格型的数据类型,每列值类型可以不同
- DataFrame 既有行索引、也有列索引
- 行索引 :index;列索引:column
- 纵向针对索引的轴:axis = 0:横向针对索引的轴:axis = 1

- DataFrame 常用于表达二维数据,但可以表达多维数据
2 两种类型的创建与操作
2.1 Series 类型的创建
2.1.1 从标量值(一个值)创建
- 使用标量值值创建 Series 类型,不能省略 index 参数
- index 指定创建的数量
- 示例:

2.1.2 从字典创建
- 第一种:不指定 index
- 创建出来的 Series 类型:键对应索引,字典的值对应Series 的值
- 示例:

- 第二种:指定 index
- index 在字典中进行选择操作,用于定义形状('排序顺序'),对应索引无值使用 NaN 表示
- 示例:

2.1.3 从 ndarray 数组创建
- 示例:
- 其中指定 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) 类型
- 示例:

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

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

2.2.4 对齐操作
- 形式:series + series
- Series 类型在运算中会自动对齐不同索引的数据,相同索引进行运算,不同索引不会进行运算
- 示例:
 - NumPy 只关心数据维度,所以运行结果是维度的运算
2.2.5 获取 name 属性
- Series 对象和索引都可以有一个名字,存储在属性 .name 中,开始未定义 name 属性没有返回值
- 示例:

2.2.6 修改 series 类型
- Series 对象的修改是是随时并且即可生效的
- 示例:修改 name 属性

2.3 DataFrame 类型创建
2.3.1 由二维 ndarray 对象创建
- 示例:

- 纵向:行索引;横向列索引
2.3.2 从一维 ndarray 对象字典创建
- 示例:

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

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

2.3.4 由表中数据创建
-
由导入的文件来创建 DataFrame 类型
-
下面以创建的数据,示意一下基本操作
-
示例1:获取 index、column、value

- 这些与 Series 基本相同
-
示例2:获取行数据
- loc:通过行标签索引行数据
- iloc:通过行号索引行数据

3 Pandas 运用
3.1 对数据类型的操作
-
改变 Series 和 DataFrame 数据结构使用重新索引或者删除
- 数据结构指增加、重排或删除
-
重新索引
-
使用
.reindex()改变或重排索引 -
示例:


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

- Series 和 DataFrame 的索引都是 Index 类型
- Index 对象是不可修改类型
- Series 和 DataFrame 的索引都是 Index 类型
-
-
索引类型的常用方法¥
方法 说明 append(idx) 连接另一个 Index 对象,产生新的 Index 对象 diff(idx) 计算差集,产生新的 Index 对象 intersection(idx) 计算交集 union(idx) 计算并集 delete(loc) 删除 loc 位置处的元素 insert(loc,e) 在 loc 位置增加一个元素 e - 示例:增加一行数据

- 示例:增加一行数据
-
删除指定索引对象
- 使用
drop()删除指定行或列索引 - 示例:删除 Series 对象

- 示例:删除 DataFrame 对象
- 默认操作 0 轴上的元素,要操作 1 轴的元素需要指定
- 使用
3.2 对数据类型的运算
-
算术运算法则
- 算术运算根据行列索引,补齐后运算,运算默认产生浮点数
- 补齐时缺项填充 NaN (空值 )
- 二维和一维、一维和零维间为广播运算
- 广播运算:低维度会作用于高纬度的每一个元素
- 一维的 Series 默认在轴 1 参与运算
- 采用
+、‐、*、/符号进行的二元运算产生新的对象- 除了符号进行计算,还有方法形式进行计算
-
方法形式的运算
方法 说明 add(d, **argws) 类型间加法运算,可选参数 sub(d, **argws) 类型间减法运算,可选参数 mul(d, **argws) 类型间乘法运算,可选参数 div(d, **argws) 类型间除法运算,可选参数 - 与符号形式相比可以增加一些参数,例如:fill_vlaue 替代 NaN
- 示例:

-
比较运算法则
- 比较运算只能比较相同索引的元素,不进行补齐
- 二维和一维、一维和零维间为广播运算
- 同纬度运算,必须保持尺寸一致
- 不同维度,默认在 1 轴
- 采用 > < >= <= == !=等符号进行的二元运算产生布尔对象
3.3 数据的排序
3.3.1 对排序理解
- 一组数据要表达一个或者多个含有,需要进行摘要处理,而摘要是一定会有损数据的

- 摘要的第一步就是排序
- Pandas 依据其特点提供了基于索引和数据两种排序方式
- 其实对索引的操作就是对数据的操作
- 当排序过程中存在 NaN 值,统一放在排序末尾
3.3.2 针对索引的排序方法
-
使用 sort_index() 方法在指定轴上根据索引进行排序,默认升序
-
语法格式:
sort_index(axis=0,ascending=True)axis:针对 X 轴进行排序,默认 0 轴
ascending:升序还是降序排列,默认 True 升序排列
-
示例:

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 降序排序

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
- 示例:
- 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个元素的最小值和最大值 - 示例:

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
-
写入数据时,文件如果是打开的情况,则需要关闭文件才能写进数据
-

浙公网安备 33010602011771号