京公网安备 11010802034615号
经营许可证编号:京B2-20210330
作者 | CDA数据分析师
从菜市场买来的菜,总有一些不太好的,所以把菜买回来以后要先做一遍预处理,把那些不太好的部分扔掉。现实中大部分的数据都类似于菜市场的菜品,拿到以后都要先做一次预处理。
常见的不规整的数据主要有缺失数据、重复数据、异常数据几种,在开始正式的数据分许之前,我们需要先把这些不太规整的数据处理掉。
缺失值就是由某些原因导致部分数据为空,对于为空的这部分数据我们一般有两种处理方式,一种是删除,即把含有缺失值的数据删除;另一种是填充,即把缺失的那部分数据用某个值代替。
1、缺失值查看
对缺失值进行处理,首先要把缺失值找出来,也就是查看哪列有缺失值。
(1)Excel实现
在Excel中我们先选中一列没有缺失值的数据,看一下这一列数据共有多少个,然后把其他列的计数与这一列进行对比,小于这一列数据个数的就代表有缺失值,差值就是缺失的个数。
下图中非缺失值列的数据计数为5,性别这一列的计数为4,这就表示性别这一列有1个缺失值。
如果想看整个数据表中每列数据的缺失情况,则要挨个选中每一列去判断该列是否有缺失值。
如果数据不是特别多,你想看具体是哪个单元格缺失,则可以利用定位条件(按快捷键Ctrl+G可弹出定位条件的对话框)查找。在定位条件的对话框中选择空值,单击确定就会把所有的空值选中,如下图所示:
通过定位条件把缺失值选出来的结果,如下图所示:
(2)Python实现
在Python中直接调用info()方法就会返回每一列值的缺失情况。关于info()方法我们在前面就用过,但是没有说明这个方法可以判断数据的缺失情况。
Python中缺失值一般用NaN表示,从用info()方法的结果来看,性别这一列是3non-null object,表示性别这一列有3个非null值,而其他列有4个非null值,说明性别这一列有一个null值。
我们还可以用isnull()方法来判断那个值是缺失值,如果是缺失值则返回True,如果不是缺失值则返回False。
2、缺失值删除
缺失值分为两种,一种是一行中某个字段是缺失值;另一种是一行中的一个字段全部为缺失值,即为一个空白行。
(1)Excel实现
在Excel中,这两种缺失值都可以通过在定位条件(按快捷键Ctrl+G可弹出定位条件的对话框)对话框中选择空值找到。
这样含有缺失值的部分就会被选中,包括某个具体的单元格及一整行,然后单击鼠标右键在弹出的删除对话框中选择删除整行选项,并单击确定按钮即可实现整行的删除。
(2)Python实现
在Python中,我们利用的是dropna()的方法,dropna()的方法默认删除含有缺失值的行,也就是只有某一行有缺失值就把这一行删除。
运行dropna()方法以后,删除含有NaN的行,返回删除后的数据。如果想删除空白行,只要给dropna()方法传入一个参数how=all即可,这样就会只删除哪些全为空值的行了,不全为空值的行就不会被删除。
上表第二行中只有性别这个字段是空值,所以在利用dropna(how=“all”)的时候并没有删除第二行,只是把全为NaN值的第三行删除掉了。
3、缺失值填充
上面 介绍了缺失值的删除,但是数据是宝贵的,一般情况下只要数据缺失比例不是过高(不大于30%),尽量别删除,而是选择填充。
(1)Excel实现
在Excel中,缺失值的填充和缺失值的删除一样,利用的也是定位条件,先把缺失值找到,然后在第一个缺失值的单元格中输入要填充的值,最常用的就是用0填充,输入以后按Ctrl+Enter组合键就可以对所有的缺失值进行填充。
缺失值填充前后的对比如下图所示:
年龄用数字填充合适,但是性别用数字填充就不太合适,那么可不可以分开填充呢?答案是可以的,选中要填充的那一列,按照填充全部数据的方式进行填充即可,只不过要填充几列,需要执行几次操作。
上图是填充前后的对比,年龄这一列我们用平均值进行填充,性别这一列我们用众数进行填充。
除了用0填充、平均值填充、众数(大多数)填充,还有向前填充(即用缺失值的前一个非缺失值填充,比如上例中编号A3对应的缺失年龄的前一个非缺失值就是16)、向后填充(与向前填充对应)等方式。
(2)Python实现
在Python中,我们利用的fillna()方法对数据表中的所有缺失值进行填充,在fillna后面的括号中输入要填充的值即可。
在Python中我们也可以按不同列填充,只要在fillna()方法的括号中指明列名即可。
上面代码中只针对这一列进行了填充,其他列未进行任何更改。
也可以同时对多列填充不同的值:
重复数据就是同样的记录有多条,对于这样的数据我们一般做删除处理。
假设你是一名数据分析师,你的主要工作是分析公司的销售情况,现有公司2018年8月的销售明细(一直一条明细对应一笔成交记录),你想看一下8月份整体成交量是多少,最简单的方式就是看一下有多少条成交明细。但是这里可能会有重复的成交记录存在,所以要先删除重复项。
(1)Excel实现
在Excel中依次单击菜单栏中的数据>数据工具>删除重复值,就可以删除重复数据了,如下图所示:
删除前后的对比如下图所示:
Excel的删除重复值默认针对所有值进行重复值判断,有订单编号、客户姓名、唯一识别码(类似于身份证号)、成交时间这四个字段,Excel会判断这四个字段是否都相等,只有都相等时才会删除,且保留第一个(行)值。
你知道了公司8月份成交明细以后,你想看一下8月份总共有多少成交客户,且每个客户在8月份首次成交的日期。
查看客户数量只需要按客户的唯一识别码进行去重就可以了。Excel默认是全选,我们可以取消全选,选择唯一识别码进行去重,这样重要唯一识别码重复就会被删除,如下图所示:
因为Excel默认会保留第一条记录,而我们又想要获取每个客户的较早成交日期,所以我们需要先对时间进行升序排列,让较早的时间排在前面,这样在删除的时候就会保留较早的成交日期了。
删除前后的对比如下图所示:
(2)Python实现
在Python中我们利用drop_duplicates()的方法,该方法默认对所有值进行重复值判断,且默认保留第一个(行)值。
上面的代码是针对所有字段进行的重复值判断,我们同样也可以只针对某一列或者某几列进行重复值删除的判断,只需要在drop_duplicates()方法中指明要判断的列名即可。
也可以利用多列去重,只需要把多个列名以列表的形式传给参数subset即可。比如按姓名和唯一识别码去重。
还可以自定义删除重复项时保留哪个,默认保留第一个,也可以设置保留最后一个,或者全部不保留。通过传入参数keep进行设置,参数keep默认值是first,即保留第一个值;也可以是last,保留最后一个值;还可以是False,即把重复值全部删除。
异常值就是相比正常数据而言过高或者过低的数据,比如一个人的年龄是0岁或者300岁都算是一个异常值,因为这和实际情况差距过大。
1、异常值检测
要处理异常值首先要检测,也就是发现异常值,发现异常值的方式主要有以下三种。
●根据业务经验划定不同指标的正常范围,超过该范围的值算作异常值。
●通过绘制箱型图,把大于(小于)箱型图上边缘(下边缘)的点称为异常值
●如果数据服从正态分布,则可以利用3σ原则;如果一个数值与平均值之间的偏差超过三倍标准差,那么我们就认为这个值是异常值。
箱型图如下图所示:
下图为正太分布图,我们把大于μ+3σ的值称为异常值。
2、异常值处理
对于异常值一般有以下几种处理方式:
●最常用的处理方式就是删除。
●把异常值当做缺失值处理。
●把异常值当做特殊情况,研究异常值出现的原因。
(1)Excel实现
在Excel中,删除异常值只要通过筛选把异常值对应的行找出来,然后单击鼠标右键选择删除即可。
对异常值进行填充,其实就是对异常值进行替换,同样通过筛选功能把异常值先找出来,然后把这些异常值替换成要填充的值即可。
(2)Python实现
在Python中,删除异常值用到的方法和Excel中的方法原理类似,在Python中是通过过滤的方法对异常值进行删除。比如df表中有年龄这个指标,要把年龄大于200的值删掉,你可以通过筛选把年龄不大于200的筛选出来,筛出来的部分就是删除大于200的值以后的新表。
对异常值进行填充,就是对异常值进行替换,利用replace()方法可以对特定的值进行替换。
1、数据类型
(1)Excel实现
在Excel中常用的数据类型就是在菜单栏中数字选项下面的几种,你可以选择其他数据格式,如下图所示:
在Excel中只要选中某一列就可以在菜单栏看到这一列的数据类型。
当选中成交时间这一列的时候,菜单栏中就会显示日期,表示成交时间这一列的数据类型是日期格式,如下图所示:
(2)Python实现
Pandas不像Excel分的那么详细,它主要有6种数据类型,如下图所示:
在Python中,不仅可以用info()方法获取每一列的数据类型,还可以通过dtype方法来获取某一列的数据类型。
2、类型转换
我们在前面说过,不同数据类型的数据可以做的事情是不一样的,所以我们需要对数据进行类型转化,把数据转换为我们需要的类型。
(1)Excel实现
在Excel中如果想要改变某一列的数据类型,只要选中这一列,然后在数字菜单栏中通过下拉菜单选择你要转换的目标类型即可实现。
下图就是将文本类型的数据转换成数值类型的数据,数值类型的数据默认为两位小数,也可以设置成其他位数。
(2)Python实现
在Python中,我们利用astype()方法对数据类型进行转换,astype后面的括号里指明要转换的目标类型即可。
索引是查找数据依据,设置索引的目的是便于我们查找数据。举个例子,你逛超市买了很多食材。
回到家以后要把他们放在冰箱里,放的过程其实就是一个建立索引的过程,比如蔬菜放在冷藏室里,肉类放在冷冻室里,这样找的时候就很快就可以找到了。
1、为无索引表添加索引
有的表没有索引,这时要给这类表加一个索引。
(1)Excel实现
在Excel中,一般都有索引的,如果没索引数据看起来会很乱,当然也会有例外,数据表就是没有索引的。这时候插入一行一列就是为表添加索引。
添加索引前后的对比如下图所示,序号列为行索引,字段名称为列索引。
(2)Python实现
在Python中,如果表没有索引,会默认用从0开始的自然数做索引,比如下面这样:
通过给表df的columns参数传入列索引值,index参数传入行索引值达到为无索引表添加索引的目的,具体实现如下:
2、重新设置索引
重新设置索引,一般指行索引的设置。有的表虽然有索引,但不是我们想要的索引,比如现在有一个表是把序号作为行索引,而我们想要吧订单编号作为行索引,该怎么实现呢?
(1)Excel实现
在Excel中重新设置行索引比较简单,你想让哪一列做行索引,直接把这一列拖到第一列的位置即可。
(2)Python实现
在Python中可以利用set_index()方法重新设置索引列,在set_index()里指明要用作行索引的列的名称即可。
在重新设置索引时,还可以给set_index()方法传入两个或者多个列名,我们把这种一个表中用哪个多列来做索引的方式称为层次化索引,层次化索引一般用在某一列中含有多个重复值的情况下。层次化索引的例子,如下所示,其中a、b、c、d分别有多个重复值。
3、重命名索引
重命名索引是针对现有的索引名进行修改的,就是改字段名。
(1)Excel实现
在Excel中重命名索引比较简单,就是直接修改字段名。
(2)Python实现
在Python中重命名索引,我们利用的是rename()方法,在rename后的括号里指明要修改的行索引及列索引名。
4、重置索引
重置索引主要用在层次化索引表中,重置索引是将索引列当做一个columns进行返回。
在下图左侧的表中,Z1,Z2是一个层次化索引,经过重置索引以后,Z1、Z2这两个索引以columns的形式返回,变为常规的两列。
在Excel中,我们要进行这种转换,直接通过复制、粘贴、删除等功能就可以实现,比较简单。我们主要讲一下在Python中怎么实现。
在Python利用的是reset_index()方法,reset_index()方法常用的参数如下:
level参数用来指定要将层次化索引的第几级别转化为columns,第一个索引为0级,第二个索引为1级,默认为全部索引,即默认吧索引全部转化为columns。
drop参数是用来指定是否将原索引删掉,即不作为一个新的columns,默认为False,即不删除原索引。
inplace参数用来指定是否修改原数据表。
reset_index()方法常用于数据分组、数据透视表中。
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
CDA数据分析师 出品 作者:李诗怡 1. IF:基础条件判断(最常用) 作用:根据指定条件的真(TRUE)或假(FALSE),返回两种不同 ...
2026-10-30“不限专业可以考的证书”这个搜索词背后,通常藏着一个很实际的担心:专业不对口,想考个证拓宽出路,但怕报了名才发现有专业限 ...
2026-10-30先回答:能考的多是技能实操类证书 40岁、初中学历,能报的证书主要集中在四类:职业技能等级证书、专项职业能力证书、特种作业 ...
2026-10-3030岁考什么证好找工作,没有一张“通用答案”。同样的证书,对有行业经验的人和准备跨行的人,价值完全不同。更实际的思路是:先 ...
2026-10-30“专业职业技术资格证书”并不是一个正式名称,而是把好几种证书混在一起的口语说法。有人用它指会计、经济这类职称考试,有人指 ...
2026-10-30大学生能考的证书,大致分四类:通用基础类、职业资格类、专业技术资格类、岗位技能与行业认证类。真正要解决的问题不是“还有哪 ...
2026-10-30“需要考哪些证书”这个问题,没有统一答案。因为“需要”至少分三种:有的证书是入职准入,没有它连岗位门槛都进不去;有的证书 ...
2026-10-30“现在什么证含金量高好考一些”,这个问题里其实藏着两个容易打架的条件。含金量高的证书,往往有报考门槛、考试周期长;好考的 ...
2026-10-30“现在考什么证最吃香”,这个问题本身藏着一个容易踩的坑:不同人说“吃香”,指的往往不是同一件事。有人指考的人多、话题热; ...
2026-10-30文凭低,不等于没证可考,但选择空间确实窄一些。学历门槛明确的准入类资格,比如部分教师资格、法律职业资格、执业医师等,通常 ...
2026-10-30土建专业的大学生问“考什么证”,最容易踩的坑是把注册类证书当成在校目标。注册建造师、注册造价工程师、注册结构工程师、监理 ...
2026-10-30中年男人考证书,最怕两件事:一是年龄、学历卡在报名门槛外,白准备半年;二是考完发现岗位用不上,钱和时间都打了水漂。所以顺 ...
2026-10-30大专学历能考的证书不少,但真正值得投入时间的,是先确认“能不能报”,再看“考了对应什么岗位”。很多证书的报考条件里写着本 ...
2026-10-30“十大建议考的证书”这个问题,很难有一份对所有人都成立的名单。同一张证书,对会计专业大三学生、想转行做数据分析的运营、以 ...
2026-10-30“什么证书有用含金量高”这个问题,很难用一张榜单回答。同一本证书,对想进医院的人可能是硬门槛,对做运营的人却用不上;对已 ...
2026-10-30在职成年人问“考什么证书有用”,先要弄清自己需要哪一种“有用”。同一张证书,对想进入准入行业的人、想在本岗晋升的人、想转 ...
2026-10-30“女生能考的证书”真正要先回答的是“你现在的条件能报什么”。学历、专业、工作年限、是否在校、所在地区政策,直接决定你能不 ...
2026-10-30“女孩考什么证书比较好”这句话里,“比较好”其实藏着三种完全不同的标准:好考,看的是报考门槛低、备考周期短;好就业,看的 ...
2026-10-30先给结论:市场岗位没有一张通吃的证书。品牌传播、数字营销与投放、用户增长、用户研究、营销数据分析,这五条路径对应的工作任 ...
2026-10-30经济学专业考什么证书,没有统一答案。经济学毕业后去向很散:有人进银行、证券、基金,有人做财务审计,有人转数据分析与经营分 ...
2026-10-30