python数据清洗入门教程(完整版)
数据清洗是整个数据分析过程的第一步,也是整个数据分析项目中最耗费时间的一步。数据清洗的过程决定了数据分析的准确性。随着大数据的越来越普及,数据清洗是必备的技能之一,本教程将较为完整地介绍利用python进行数据清洗的整个过程。即适合零基础的小白也可作为数据清洗大佬的复习指南。文章较长,干货较多,建议大家先收藏后观看,希望对大家有所帮助。
为了方便阅读和复习,本教程中的代码均采用图片形式,源代码和所需要的数据在下面的链接里 链接:https://pan.baidu.com/s/1-3PMsSs5XKjhszVXQIABpw 提取码:23uk
课程大纲
1.数据清洗之常用工具1.1 NumpyNumpy常用数据结构Numpy常用方法数组访问方法Numpy常用数据清洗函数
1.2 PandasPandas常用数据结构series和方法Pandas常用数据结构dataframe和方法series和dataframe常用方法
2.数据清洗之文件操作2.1 csv文件读写2.2 excel文件读写2.3 数据库文件读写
3. 数据清洗之数据表处理3.1 数据常用筛选方法3.2 数据增加和删除3.3 数据修改和查找3.4 数据整理3.5层次化索引
4. 数据清洗之数据转换4.1 日期格式数据处理4.2 字符串数据处理4.3 高阶函数数据处理
5. 数据清洗之数据统计5.1 数据分组运算5.2 聚合函数使用5.3 分组对象与apply函数5.4 透视图与交叉表
6. 数据清洗之数据预处理6.1 重复值处理6.2 缺失值处理6.3 异常值处理6.4 数据离散化处理
7. 总结与梳理7.1 数据清洗步骤7.2 函数大全7.3 数据清洗之总结
1.数据清洗之常用工具
数据清洗意义
现实生活中,数据并非完美的, 需要进行清洗才能进行后面的数据分析数据清洗是整个数据分析项目最消耗时间的一步数据的质量最终决定了数据分析的准确性数据清洗是唯一可以提高数据质量的方法,使得数据分析的结果也变得更加可靠
数据清洗常用工具
目前在Python中, numpy和pandas是最主流的工具Numpy中的向量化运算使得数据处理变得高效Pandas提供了大量数据清洗的高效方法在Python中,尽可能多的使用numpy和pandas中的函数,提高数据清洗的效率
1.1 Numpy
Numpy常用数据结构
Numpy中常用的数据结构是ndarray格式使用array函数创建,语法格式为array(列表或元组)可以使用其他函数例如arange、linspace、zeros等创建
Numpy常用方法
ndim: 返回int,表示ndarray的维度shape:返回尺寸,几行几列size:返回数组元素的个数dtype:返回数组中元素的类型运算:直接可以在每个元素加减乘除
Numpy常用数据清洗函数
排序函数 • sort函数: 从小到大进行排序 • argsort函数: 返回的是数据中从小到大的索引值数据的搜索 • np.where: 可以自定义返回满足条件的情况 • np.extract: 返回满足条件的元素值
1.2 Pandas
Pandas常用数据结构series和方法
通过pandas.Series来创建Series数据结构。pandas.Series(data,index,dtype,name)。上述参数中,data可以为列表,array或者dict。上述参数中, index表示索引,必须与数据同长度,name代表对象的名称
Pandas常用数据结构dataframe和方法
通过pandas.DataFrame来创建DataFrame数据结构。pandas. DataFrame(data,index,dtype,columns)。上述参数中,data可以为列表,array或者dict。上述参数中, index表示行索引, columns代表列名或者列标签
series和dataframe常用方法
values 返回对象所有元素的值index 返回行索引dtypes 返回索引shape 返回对象数据形状ndim 返回对象的维度size 返回对象的个数columns 返回列标签(只针对dataframe数据结构)
2.数据清洗之文件操作
Pandas读写CSV文件和相关参数解释Pandas读写excel文件和相关参数解释Pandas与mysql的交互
2.1 csv文件读写
pandas内置了10多种数据源读取函数,常见的就是CSV和EXCEL使用read_csv方法读取,结果为dataframe格式在读取csv文件时,文件名称尽量是英文参数较多,可以自行控制,但很多时候用默认参数读取csv时,注意编码,常用编码为utf-8、gbk 、gbk2312和gb18030等使用to_csv方法快速保存
2.2 excel文件读写
使用read_excel读取,读取后的结果为dataframe格式读取excel文件和csv文件参数大致一样, 但要考虑工作sheet页参数较多,可以自行控制,但很多时候用默认参数读取excel时,注意编码,常用编码为utf-8、gbk 、gbk2312和gb18030等使用to_excel快速保存为xlsx格式
2.3 数据库文件读写
使用sqlalchemy建立连接需要知道数据库的相关参数,如数据库IP地址、用户名和密码等通过pandas中read_sql 函数读入, 读取完以后是dataframe格式通过dataframe的to_sql方法保存
数据库建立连接参数 conn =create_engine(‘mysql+pymysql://user:passward@IP:3306/test01’) • root: 用户名 • passward: 密码 • IP : 服务器IP,本地电脑用localhost • 3306: 端口号 • test01 : 数据库名称
df.to_sql(name, con=engine, if_exists=‘replace/append/fail’,index=False) • name是表名 • con是连接 • if_exists:表如果存在怎么处理。三个选项 append代表追加, replace代表删除原表,建立新表,fail代表什么都不干 • index=False:不插入索引index
3. 数据清洗之数据表处理
3.1 数据常用筛选方法
在数据中,选择需要的行或者列基础索引方式,就是直接引用ioc[行索引名称或者条件,列索引名称或者标签]iloc[行索引位置,列索引位置]注意, 区分loc和iloc
3.2 数据增加和删除
在数据中,直接添加列使用df.insert方法在数据中添加一列掌握drop(labels,axis,inplace=True) 的用法labels表示删除的数据, axis表示作用轴,inplace=True表示是否对原数据生效axis=0按行操作, axis=1按列操作使用del函数直接删除其中一列
参数解释
3.3 数据修改和查找
在数据中, 可以使用rename修改列名称或者行索引名称使用loc方法修改数据使用loc方法查找符合条件的数据条件与条件之间用&或者|连接,分别代表‘且’和‘或’使用between和isin选择满足条件的行
3.4 数据整理
定义:在数据清洗过程中,很多时候需要将不用的数据整理在一起,方便后续的分析,这个过程也叫数据合并
合并方法:常见的合并方法有堆叠和按主键进行合并,堆叠又分为横向堆叠和纵向堆叠,按主键合并类似于sql里面的关联操作
横向堆叠将两张表或多张表在X轴方向,即横向拼接在一起纵向堆叠将两张表或多张表在Y轴方向,即纵向拼接在一起注意使用concat时,axis =1用于横向,0代表纵向注意join取inner或者outer时,分别代表交集和并集
关联操作 纵向合并
3.5层次化索引
定义:在一个轴上拥有两个或者两个以上的索引 • 使用loc语句进行访问 • loc里面接受tuple,如loc[(a,b),:]
4. 数据清洗之数据转换
4.1 日期格式数据处理
Pandas中使用to_datetime()方法将文本格式转换为日期格式dataframe数据类型如果为datetime64,可以使用dt方法取出年月日等对于时间差数据,可以使用timedelta函数将其转换为指定时间单位的数值时间差数据,可以使用dt方法访问其常用属性
4.2 字符串数据处理
Pandas中提供了字符串的函数,但只能对字符型变量进行使用通过str方法访问相关属性可以使用字符串的相关方法进行数据处理
4.3 高阶函数数据处理
在dataframe中使用apply方法,调用自定义函数对数据进行处理函数apply, axis=0表示对行进行操作,axis=1表示对列进行操作可以使用astype函数对数据进行转换可以使用map函数进行数据转换
5. 数据清洗之数据统计
5.1 数据分组运算
分组计算根据某个或者某几个字段对数据集进行分组,然后运用特定的函数,得到结果
使用groupby方法进行分组计算,得到分组对象GroupBy语法为df.groupby(by=)分组对象GroupBy可以运用描述性统计方法, 如count、mean 、median 、max和min等
5.2 聚合函数使用
对分组对象使用agg聚合函数Groupby.agg(func)针对不同的变量使用不同的统计方法
5.3 分组对象与apply函数
函数apply即可用于分组对象,也可以作用于dataframe数据Groupby.apply(func)需要注意axis=0和axis=1的区别
5.4 透视图与交叉表
在数据分析中,数据透视表是常见的工具之一,需要根据行或列对数据进行各个维度数据的汇总,在pandas中,提供了相关函数解决此类问题,交叉表更多用于频数的分析。
pivot_table( data, index, columns,values, aggfunc, fill_value,margins, margins_name=)
Index : 行分组键
columns: 列分组键
values: 分组的字段,只能为数值型变量
aggfunc: 聚合函数
margins: 是否需要总计
交叉表用于计算分组频率 pd.crosstab(index,columns,normalize)
Index: 行索引
Columns: 列索引
Normalize: 数据对数据进行标准化,index表示行,column表示列
6. 数据清洗之数据预处理
6.1 重复值处理
数据清洗一般先从重复值和缺失值开始处理重复值一般采取删除法来处理但有些重复值不能删除,例如订单明细数据或交易明细数据等
6.2 缺失值处理
缺失值首先需要根据实际情况定义可以采取直接删除法有时候需要使用替换法或者插值法常用的替换法有均值替换、前向、后向替换和常数替换
6.3 异常值处理
指那些偏离正常范围的值,不是错误值异常值出现频率较低,但又会对实际项目分析造成偏差异常值一般用过箱线图法(分位差法)或者分布图(标准差法)来判断异常值往往采取盖帽法或者数据离散化
6.4 数据离散化处理
数据离散化就是分箱一般常用分箱方法是等频分箱或者等宽分箱一般使用pd.cut或者pd.qcut函数
pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False)
x,类array对象,且必须为一维,待切割的原形式
bins, 整数、序列尺度、或间隔索引。如果bins是一个整数,它定义了x宽度范围内的等宽面元数量,
但是在这种情况下,x的范围在每个边上被延长1%,以保证包括x的最小值或最大值。
如果bin是序列,它定义了允许非均匀bin宽度的bin边缘。在这种情况下没有x的范围的扩展。
right,布尔值。是否是左开右闭区间,right=True,左开右闭,right=False,左闭右开
labels,用作结果箱的标签。必须与结果箱相同长度。如果FALSE,只返回整数指标面元。
retbins,布尔值。是否返回面元
precision,整数。返回面元的小数点几位
include_lowest,布尔值。第一个区间的左端点是否包含
pandas.qcut(x, q, labels=None, retbins=False, precision=3, duplicates=’raise’)
x
q,整数或分位数组成的数组。
q, 整数 或分位数数组 整数比如 4 代表 按照4分位数 进行切割
labels, 用作结果箱的标签。必须与结果箱相同长度。如果FALSE,只返回整数指标面元。
7. 总结与梳理
7.1 数据清洗步骤
数据获取,使用read_csv或者read_excel数据探索,使用shape,describe或者info函数行列操作,使用loc或者iloc函数数据整合,对不同数据源进行整理数据类型转换,对不同字段数据类型进行转换分组汇总,对数据进行各个维度的计算处理重复值、缺失值和异常值以及数据离散化
7.2 函数大全
merge,concat函数常常用于数据整合pd.to_datetime常常用于日期格式转换str函数用于字符串操作函数astype用于数据类型转换函数apply和map用于更加高级的数据处理Groupby用于创建分组对象透视表函数pd.pivot_table和交叉表pd.crosstab分组对象和agg结合使用,统计需要的信息
7.3 数据清洗之总结
数据清洗实质上是将实际业务问题中,脏数据清洗干净,转换为’干净的数据’, 所谓的脏 ,指数据可能存在以下几种问题(主要问题):
数据缺失 (Incomplete) 是属性值为空的情况。如 Occupancy = “ ”数据噪声 (Noisy)是数据值不合常理的情况。如 Salary = “-100”数据不一致 (Inconsistent)是数据前后存在矛盾的情况。如 Age = “042” 或者 Birthday = “01/09/1985”数据冗余 (Redundant)是数据量或者属性数目超出数据分析需要的情况离群点/异常值 (Outliers)是偏离大部分值的数据数据重复是在数据集中出现多次的数据
❤本教程到这终于结束了,希望对大家有所帮助❤来源:幸福的小猴子qiqi