用Pandas进行数据清洗
Pandas 是 Python 中很流行的类库,使用它可以进行数据科学计算和数据分析,并且可以联合其他数据科学计算工具一块儿使用,比如,SciPy,NumPy 和Matplotlib,建模工程师可以通过创建端到端的分析工作流来解决业务问题。虽然我们可以 Python 和数据分析做很多强大的事情,但是我们的分析结果的好坏依赖于数据的好坏。很多数据集存在数据缺失,或数据格式不统一(畸形数据),或错误数据的情况。不管是不完善的报表,还是技术处理数据的失当都会不可避免的引起“脏”数据。庆幸的是,Pandas 提供功能强大的类库,不管数据处于什么状态,他可以帮助我们通过清洗数据,排序数据,最后得到清晰明了的数据。对于案例的数据,准备使用
movie_metadata.csv(链接:https://pan.baidu.com/s/1gsyhp2IxgjFALLBm5qMiUg?pwd=aomp
提取码:aomp)。这个数据集包含了很多信息,演员、导演、预算、总输入,以及 IMDB 评分和上映时间。实际上,可以使用上百万或者更大的数据库,但是,案例数据集对于开始入门还是很好的。
不幸的是,有一些列的值是缺失的,有些列的默认值是0,有的是 NaN(Not a Number)。
下面我们通过使用 Pandas 提供的功能来清洗“脏”数据
准备工作
首先,第一次使用 Pandas 之前,我们需要安装 Pandas。安装命令如下:
pip install pandas
接下来,导入 Pandas 到我们的代码中,代码如下:
#可以使用其他的别名, 但是,pd 是官方推荐的别名,也是大家习惯的别名
import pandas as pd
最后,加载数据集,代码如下:
data = pd.read_csv('../data/tmdb_5000_credits.csv')
注意,确保已经下载数据集,如果你的代码和数据集的存放结构与我的一样,直接运行就可以
否则,要根据实际的情况,修改 read_csv() 的文件路径
检查数据
检查一下我们刚刚读入数据的基本结构,Pandas 提供了 head() 方法打印输出前五行数据。目的是让我们对读入的数据有一个大致的了解。
data.head()
我们可以通过上面介绍的 Pandas 的方法查看数据,也可以通过传统的 Excel 程序查看数据,这个时候,我们可以开始记录数据上的问题,然后,我们再想办法解决问题。
Pandas 提供了一些选择的方法,这些选择的方法可以把数据切片,也可以把数据切块。下面我们简单介绍一下:
- 查看一列的一些基本统计信息:data.columnname.describe()
- 选择一列:data['columnname']
- 选择一列的前几行数据:data['columnsname'][:n]
- 选择多列:data[['column1','column2']]
- Where 条件过滤:data[data['columnname'] > condition]
处理缺失数据
缺失数据是最常见的问题之一。产生这个问题可能的原因
- 从来没有填正确过
- 数据不可用
- 计算错误
无论什么原因,只要有空白值得存在,就会引起后续的数据分析的错误。下面介绍几个处理缺失数据的方法:
- 为缺失数据赋值默认值
- 去掉/删除缺失数据行
- 去掉/删除缺失率高的列
添加默认值
我们应该去掉那些不友好的 NaN 值。但是,我们应该用什么值替换呢?在这里,我们就应该稍微掌握一下数据。对于我们的例子,我们检查一下“country”列。这一列非常简单,然而有一些电影没有提供地区,所以有些数据的值是
NaN。在我们的案例中,我们推断地区并不是很重要,所以,我们可是使用“”空字符串或其他默认值。
data.country= data.country.fillna('')
上面,我们就将“country”整个列使用“”空字符串替换了,或者我们也可以轻易地使用“None Given”这样的默认值进行替换。如果想了解更多 fillna() 的详细信息看pandas.DataFrame.fillna。
使用数字类型的数据,比如,电影的时长,计算像电影平均时长可以帮我们甚至是数据集。这并不是最优解,但这个持续时间是根据其他数据估算出来的。这样的方式下,就不会因为像 0 或者 NaN这样的值在我们分析的时候而抛错。
data.duration = data.duration.fillna(data.duration.mean())
删除不完整的行
假设我们想删除任何有缺失值得行。这种操作太据侵略性,但是我们可以根据我们的需要进行扩展。
删除任何包含 NA 值的行是很容的:
data.dropna()
当然,我们也可以删除一整行的值都为 NA:
data.dropna(how='all')
我们也可以增加一些限制,在一行中有多少非空值的数据是可以保留下来的(在下面的例子中,行数据中至少要有 5 个非空值)
data.drop(thresh=5)
比如说,我们不想要不知道电影上映时间的数据:
data.dropna(subset=['title_year'])
上面的 subset 参数允许我们选择想要检查的列。如果是多个列,可以使用列名的 list 作为参数。
删除不完整的列
我们可以上面的操作应用到列上。我们仅仅需要在代码上使用 axis=1 参数。这个意思就是操作列而不是行。(我们已经在行的例子中使用了 axis=0,因为如果我们不传参数 axis,默认是axis=0。)
删除一正列为 NA 的列:
data.drop(axis=1, how='all')
删除任何包含空值的列:
data.drop(axis=1. how='any')
这里也可以使用像上面一样的 threshold 和 subset,更多的详情和案例,请参考pandas.DataFrame.dropna。
规范化数据类型
有的时候,尤其当我们读取 csv 中一串数字的时候,有的时候数值类型的数字被读成字符串的数字,或将字符串的数字读成数据值类型的数字。Pandas 还是提供了规范化我们数据类型的方式:
data = pd.read_csv('../data/moive_metadata.csv', dtype={'duration': int})
这就是告诉 Pandas ‘duration’列的类型是数值类型。同样的,如果想把上映年读成字符串而不是数值类型,我们使用和上面类似的方法:
data = pd.read_csv('./data/moive_metadata.csv', dtype={'title_year':str})
注意,需要记住的是,再次从磁盘上读取 csv ,确保规范化了我们的数据类型,或者在读取之前已经保存了中间结果。
必要的变换
人工录入的数据可能都需要进行一些必要的变换。
- 错别字
- 英文单词时大小写的不统一
- 输入了额外的空格
将我们数据中所有的 movie_title 改成大写:
data['movie_title'].str.upper()
同样的,干掉末尾空格:
data['movie_title'].str.strip()
这里并没有介绍关于英文的拼写错误的问题,可以参考模糊匹配。
重命名列名
最终的数据可能是有计算机生成的,那么,列名有可能也是计算机按照一定计算规律生成的。这些列名对计算机没有什么,但是对于人来说可能就不够友好,这时候,我们就需要重命名成对人友好的列名,代码如下:
data,rename(columns = {‘title_year’:’release_date’, ‘movie_facebook_likes’:’facebook_likes’})
像上面这样,我们就完成了两个列的重命名。需要注意的是,这个方法并没有提供
inpalce 参数,我们需要将结果赋值给自己才可以:
data = data.rename(columns = {‘title_year’:’release_date’, ‘movie_facebook_likes’:’facebook_likes’})
保存结果
我们完成数据清洗之后,一般会把结果再以 csv 的格式保存下来,以便后续其他程序的处理。同样,Pandas 提供了非常易用的方法:
data.to_csv(‘cleanfile.csv’ encoding=’utf-8’)
用Pandas进行数据清洗相关推荐
- 这就是数据分析之Pandas与数据清洗
总括 在数据分析工作中,Pandas 的使用频率是很高的,一方面是因为 Pandas 提供的基础数据结构 DataFrame 与 json 的契合度很高,转换起来就很方便.另一方面,如果我们日常的数据 ...
- pandas 提取某几列_用Pandas做数据清洗,我一般都这么干……
导读:作为一名数据分析师,每天都在完成各种数据分析需求,其中数据清洗是必不可少的一个步骤.一般而言,当提及数据清洗时,其实是主要包括了缺失值处理.重复值处理和异常值处理三类操作,本文即围绕这这三个方 ...
- pandas 提取某几列_用pandas做数据清洗,我一般都这么干
导读 作为一名数据分析师,每天都在完成各种数据分析需求,其中数据清洗是必不可少的一个步骤.一般而言,当提及数据清洗时,其实是主要包括了缺失值处理.重复值处理和异常值处理三类操作,本文即围绕这这三个方面 ...
- 3.4 利用Pandas进行数据清洗和数据规整化
本文章是3.4.3.5的内容,如果想要源代码和数据可以看以下链接: https://download.csdn.net/download/Ahaha_biancheng/83338868 文章目录 3 ...
- 使用Pandas进行数据清洗
数据清洗的目的是修正异常值,以更好地进行运算和观察结果.通过Pandas对序列或数据帧的清洗分为两个步骤:异常检测和数据修正. 1.异常检测 Pandas中的空值用'NaN'表示,可以通过调用isnu ...
- 基于Pandas的数据清洗
源数据中会存在缺失值(空值) 重复值 异常值 处理丢失处理 有两种丢失数据: None np.nan(NaN) import numpy as np type(None)#None对象类型type(n ...
- 【pandas之数据清洗和处理和空值处理】
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.Pandas对缺失值的处理 二.使用步骤 0.数据处理 1.空值处理 2.删除全是空值的行和列 3.填充空值 3. ...
- 【Python数据分析学习笔记Day3】(三)数据分析工具pandas,数据清洗,聚类K-Means
Pandas学习 https://blog.csdn.net/qq_41251963/article/details/103904044 Pandas数据结构 import pandas as pd ...
- python 数据挖掘 培训视频下利用Pandas进行数据清洗
在许多数据分析工作中,数据中经常会有缺失数据情况.Pandas的目标之⼀就是尽量轻松地处理缺失数据. 01 检测与处理缺失值 Pandas对象的所有描述性统计默认都不包括缺失数据.对于数值数据,Pan ...
- Pandas大数据清洗实战之一:安装与初识
一.基础 1.简介 pandas是Python中的一个数据分析和清洗的库,基于numpy构建的,在其中包含了大量的标准数据模型,提供了高效操作大型数据集所需要的工具.最早呢是被作为金融数据分析工具开发 ...
最新文章
- Elasticsearch的前后台运行与停止(rpm包方式)
- Homebrew存在大漏洞,恶意代码远程操纵电脑! 网友:这不是单方面的责任
- Python3入门笔记(1) —— windows安装与运行
- LA3708墓地雕塑
- C# 编码规范和编程好习惯
- 数据库面试题【十三、大表数据查询,怎么优化】
- PHP无法执行MySQL语句,解决PHP执行批量MySQL语句的问题
- J2EE 领域的一些技术框架结构图
- cydia多开微信_微信及陌陌多开教程:多开+分别推送消息+一键隐藏方法
- android cocos 二次启动 崩溃,基于cocos2dx 1.0.1 0.12.0的第二次运行时android...
- 计算机二级题库病毒,计算机二级MS Office题库
- 2019蓝桥杯决赛Java_2019年蓝桥杯省赛总结
- 相机的标定之手机相机的标定
- (十四)覆盖率类型、覆盖率组
- Java对接混合支付、退款、提现心得
- 如何进行团队建设以保持团队稳定?
- bilibili服务器维护7月,GitHub - thestarweb/bilibilidan: 一个B站弹幕姬,就是不会在第一时间维护。。支持插件!!...
- 跨越逐梦路上的荆棘(程序猿生存指南)
- 什么时候用到全排列_【什么情况下要除以一个全排列?举例说明最好,万分感激,】作业帮...
- 兜兜的乐扣刷题算法小记(不停更)