python数据清洗入门教程(完整版)
数据清洗是整个数据分析过程的第一步,也是整个数据分析项目中最耗费时间的一步。数据清洗的过程决定了数据分析的准确性。随着大数据的越来越普及,数据清洗是必备的技能之一,本教程将较为完整地介绍利用python进行数据清洗的整个过程。即适合零基础的小白也可作为数据清洗大佬的复习指南。文章较长,干货较多,建议大家先收藏后观看,希望对大家有所帮助。
为了方便阅读和复习,本教程中的代码均采用图片形式,源代码和所需要的数据在下面的链接里
链接:https://pan.baidu.com/s/1-3PMsSs5XKjhszVXQIABpw
提取码:23uk
课程大纲
- 1.数据清洗之常用工具
- 1.1 Numpy
- Numpy常用数据结构
- Numpy常用方法
- 数组访问方法
- Numpy常用数据清洗函数
- 1.2 Pandas
- Pandas常用数据结构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)是偏离大部分值的数据
- 数据重复是在数据集中出现多次的数据
❤本教程到这终于结束了,希望对大家有所帮助❤
python数据清洗入门教程(完整版)相关推荐
- python入门教程完整版(懂中文就能学会)-Python入门教程完整版(懂中文就能学会)...
不过小编的内心是强大的,网友虐我千百遍,我待网友如初恋,因为今天又给大家带来了干货,Python入门教程完整版,完整版啊!完整版! 言归正传,小编该给大家介绍一下这套教程了,希望每个小伙伴都沉迷学习, ...
- python3入门与进阶笔记_16_变量进阶 — 黑马程序员《Python入门教程完整版》笔记...
变量进阶(理解) - 黑马程序员<Python入门教程完整版>笔记 目标变量的引用 可变和不可变类型 局部变量和全局变量 01. 变量的引用变量 和 数据 都是保存在 内存 中的 在 Py ...
- python新手教程全套_Python入门教程完整版(懂中文就能学会)
前几天给大家分享视频<python基础教程>受到了广泛的关注,有人不知道怎么领取,居然称小编为"骗子". 不过小编的内心是强大的,网友虐我千百遍,我待网友如初恋,因为今 ...
- Python入门教程完整版
今天本宝宝给大家带来了干货,Python入门教程完整版,完整版啊!完整版! 言归正传,我来给大家介绍一下这套教程,希望每个小伙伴都沉迷学习,无法自拔! 本套教程学习时间15天 1-3天内容:为Linu ...
- python文件目录管理 项目_Python入门教程完整版(懂中文就能学会)
今天给大家带来了干货,Python入门教程完整版,完整版啊!完整版! 言归正传,小编该给大家介绍一下这套教程了,希望每个小伙伴都沉迷学习,无法自拔 本套教程学习时间15天 1-3天内容:为Linux基 ...
- Python入门教程完整版(懂中文就能学会)
今天本宝宝给大家带来了干货,Python入门教程完整版,完整版啊!完整版! 言归正传,我来给大家介绍一下这套教程,希望每个小伙伴都沉迷学习,无法自拔! 本套教程学习时间15天 1-3天内容:为Linu ...
- 最新版python教程_Python入门教程完整版(懂中文就能学会)
前几天给大家分享视频<python基础教程>受到了广泛的关注,有人不知道怎么领取,居然称小编为"骗子". 不过小编的内心是强大的,网友虐我千百遍,我待网友如初恋,因为今 ...
- python设计游戏的背景_04_游戏背景 — 黑马程序员《Python入门教程完整版》笔记...
游戏背景 黑马程序员<Python入门教程完整版>笔记 - 黑马程序员<Python入门教程完整版>笔记 目标背景交替滚动的思路确定 显示游戏背景 01. 背景交替滚动的思路确 ...
- python中文编程教学_Python入门教程完整版400集(懂中文就能学会)快来带走
2020最新Python零基础到精通资料教材,干货分享,新基础Python教材,看这里,这里有你想要的所有资源哦,最强笔记,教你怎么入门提升!让你对自己更加有信心,重点是资料都是免费的,免费!!! 如 ...
- python免费全套教程-2020全网 最详细的Python入门教程完整版,无偿分享,收藏
简介:Python是一种简单易学,功能强大的编程语言,它有高效率的高层数据结构,简单而有效地实现面向对象编程.Python简洁的语法和对动态输入的支持,再加上解释性语言的本质,使得它在大多数编程语言的 ...
最新文章
- Mybatis缓存机制理解及配置
- 你应该知道的高性能无锁队列Disruptor
- 重磅! SLAM从入门到精通系统教程汇总
- 文件管理器-android源代码
- Java SE、Java EE、Java ME三者的区别
- 如何判断字符串已经被url编码_如何判断回文数?不要再将整数转为字符串来解决这个问题了...
- 蚂蚁金服入职考试_程序员入职蚂蚁金服被质疑,网友评论人生污点,不把外包当人?...
- 中文信息处理(三)—— 词性标注
- win11WiFi驱动如何下载 windows11WiFi驱动下载的步骤方法
- Layer报错:TypeError n.sort is not a function
- flowable 监听器中无法获取 oauth 上下文对象
- archive.php 不起作用,PHP ZipArchive在Laravel中不起作用
- 以4%参数量比肩GPT-3!Deepmind 发布检索型 LM,或将成为 LM 发展新趋势!?
- Zotero文献管理软件使用指南——入门篇
- FreeMarker常见指令的简单介绍—快速入门(二)
- sklearn的系统学习——决策树分类器(含有python完整代码)
- 【计算机游戏开发】游戏交互界面设计
- 硬核分享|探针盒子?不用怕!手把手教你打造专属隐私保护工具
- 2021年中国LED工业照明市场趋势报告、技术动态创新及2027年市场预测
- Docker 从入门到入坑。
热门文章
- 钢板弹簧matlab,Matlab/GUI在钢板弹簧悬架设计中的应用
- php文章重复度检测,彻底解决网站存在的内容重复度的方法
- creo绘图属性模板_最好用的工程图格式文件及建模模板文件
- CefSharp 实现拖拉滑动验证Demo
- 单片机实验报告实验七:定时器实验
- 页面置换算法之最佳置换算法的模拟(C++)
- matlab进化树的下载,MEGA官网下载|MEGA进化树 V7.0.26 官方最新版 下载_当下软件园_软件下载...
- Unity3D中Grid Layout Group组件一键实现自动排版Image
- G312高速公路S标段路线设计--金陵科技学院道路毕业设计
- java工程师考华为证有用吗_华为初级认证网络工程师有什么用?大学生适合考吗?...