python数据清洗入门教程(完整版)
数据清洗是整个数据分析过程的第一步,也是整个数据分析项目中最耗费时间的一步。数据清洗的过程决定了数据分析的准确性。随着大数据的越来越普及,数据清洗是必备的技能之一,本教程将较为完整地介绍利用python进行数据清洗的整个过程。即适合零基础的小白也可作为数据清洗大佬的复习指南。文章较长,干货较多,建议大家先收藏后观看,希望对大家有所帮助。
为了方便阅读和复习,本教程中的代码均采用图片形式,源代码和所需要的数据在下面的链接里
链接:https://pan.baidu.com/s/1-3PMsSs5XKjhszVXQIABpw
提取码:23uk
课程大纲
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: 返回满足条件的元素值
通过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
在数据中,选择需要的行或者列
基础索引方式,就是直接引用
ioc[行索引名称或者条件,列索引名称或者标签]
iloc[行索引位置,列索引位置]
注意, 区分loc和iloc
3.2 数据增加和删除
在数据中,直接添加列
使用df.insert方法在数据中添加一列
掌握drop(labels,axis,inplace=True) 的用法
labels表示删除的数据, axis表示作用轴,inplace=True表示是否对原数据生效
axis=0按行操作, axis=1按列操作
使用del函数直接删除其中一列
参数解释
在数据中, 可以使用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)
针对不同的变量使用不同的统计方法
函数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)
数据清洗一般先从重复值和缺失值开始处理
重复值一般采取删除法来处理
但有些重复值不能删除,例如订单明细数据或交易明细数据等
缺失值首先需要根据实际情况定义
可以采取直接删除法
有时候需要使用替换法或者插值法
常用的替换法有均值替换、前向、后向替换和常数替换
指那些偏离正常范围的值,不是错误值
异常值出现频率较低,但又会对实际项目分析造成偏差
异常值一般用过箱线图法(分位差法)或者分布图(标准差法)来判断
异常值往往采取盖帽法或者数据离散化
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)是偏离大部分值的数据
数据重复是在数据集中出现多次的数据
❤本教程到这终于结束了,希望对大家有所帮助❤