当前位置: 首页 > 后端技术 > Python

Python数据分析入门教程(二):数据预处理

时间:2023-03-26 11:30:59 Python

作者|CDADataAnalyst从菜市场买来的菜总是有一些不好的菜,所以买菜后首先要进行预处理。扔掉不太好的部分。现实中,大部分数据都类似于菜市场的菜品,一旦得到就必须进行预处理。常见的不规则数据主要包括缺失数据、重复数据和异常数据。在开始正式的数据分发之前,我们需要先对这些不规则的数据进行处理。1.缺失值的处理缺失值是数据中由于某些原因而空出的一部分。对于这部分为空的数据,我们一般有两种处理方式。一种是删除,即删除包含缺失值的数据;另一个是填充,即用某个值替换数据中缺失的部分。1、缺失值查看处理缺失值,首先要找出缺失值,即查看哪些列有缺失值。(1)Excel实现在Excel中,我们先选取一列没有缺失值的数据,看这一列有多少数据,然后将其他列的计数与这一列进行比较。如果该列的数据个数小于该列的数据个数,则说明存在缺失值。值,区别在于缺失的个数。下图中,非缺失值列的数据个数为5,性别列的个数为4,也就是说性别列有1个缺失值。如果要查看整个数据表中每一列的缺失数据,需要将每一列一一选中,判断该列是否存在缺失值。如果数据不是特别大,想看看是哪个单元格少了,可以使用定位条件(按快捷键Ctrl+G弹出定位条件对话框)进行搜索。在定位条件对话框中选择空值,点击确定,选择所有空值,如下图:通过定位条件选择缺失值的结果,如下图:(2)Python中的实现在Python中直接调用info()方法会返回每列值不存在的情况。关于info()方法,我们之前用过,但是没有说明这个方法可以判断数据是否缺失。Python中的缺失值一般用NaN来表示。从info()方法的结果来看,gender列是一个3non-null对象,说明gender列有3个非null值,而其他列有4个非null值。指示性别列具有空值。我们也可以使用isnull()方法来判断哪个值是缺失值,如果是缺失值就返回True,如果不是缺失值就返回False。2.缺失值删除缺失值有两种类型。一是某行某字段为缺失值;另一种是一行中的某个字段全是缺失值,也就是空行。(1)Excel在Excel中实现。这两个缺失值都可以通过在定位条件(按快捷键Ctrl+G弹出定位条件对话框)对话框中选择空值找到。这样就会选中包含缺失值的部分,包括特定的单元格和整行,然后点击鼠标右键,在弹出的删除对话框中选择删除整行的选项,并点击确定按钮,实现整行行删除。(2)Python实现在Python中,我们使用dropna()方法。dropna()方法默认删除有缺失值的行,也就是只有有缺失值的行才删除这一行。运行dropna()方法后,删除包含NaN的行并返回删除的数据。如果要删除空行,只需要给dropna()方法传入一个参数how=all,这样只删除全为空值的行,不全为空值的行不删除被删除。上表第二行只有gender字段为空,所以使用dropna(how="all")时,并没有删除第二行,而是删除了所有NaN值的第三行。3.缺失值填充上面介绍了缺失值的删除,但是数据是宝贵的。一般只要缺失数据比例不是太高(不大于30%),尽量不要删除,而是选择填充。(1)Excel在Excel中实现。缺失值的填充和缺失值的删除是一样的。它还使用定位条件。先找到缺失值,然后在第一个缺失值单元格中输入要填充的值,最后最常用的是填充0,输入后按Ctrl+Enter即可填充所有缺失值。缺失值填充前后对比如下图:年龄用数字填充比较合适,性别用数字填充不合适,那能不能分开填?答案是肯定的,只需选中要填充的列,按照填充所有数据的方式进行填充即可,但是需要进行多次操作才能填充几列。上图是填充前后的对比。年龄栏填平均值,性别栏填众数。除了用0、平均值、众数(most)填充外,还有正向填充(即用缺失值的前一个非缺失值填充,比如缺失年龄对应的前一个非缺失对上面例子中数字A3的值为16),向后填充(对应向前填充)等。(2)Python实现在Python中,我们使用fillna()方法来填充所有缺失值中的值数据表,只需在fillna后的括号内输入要填写的值即可。在Python中,我们也可以填充不同的列,只要在fillna()方法的括号中指定列名即可。在上面的代码中,只填充了这一列,没有更改其他列。也可以同时给多个列填充不同的值:2.重复值处理重复数据是指存在多条相同类型的记录。对于此类数据,我们通常会删除它们。假设你是一名数据分析师,你的主要工作是分析公司的销售情况。现有公司2018年8月的销售明细(总是一个明细对应一条交易记录),而你想看8月份的整体交易量是多少,最简单的方法就是看有多少个交易明细。但是这里可能有重复的交易记录,所以要先删除重复的。(1)Excel实现在Excel中点击菜单栏中的数据>数据工具>删除重复值,即可删除重复数据,如下图:删除前后对比如下图:Excel删除重复值默认情况下,对所有值都判断重复值。有四个字段:订单号、客户姓名、唯一识别码(类似身份证号)、交易时间。Excel会判断这四个字段是否相等,相等才删除,保留第一个(行)值。知道了公司八月份的交易明细后,想看看八月份的交易客户总数,以及每个客户在八月份的第一笔交易的日期。查看客户数量,只需要根据客户的唯一标识码去重即可。Excel默认全选,我们可以取消选择,选择唯一标识码去重,这样重复的重要唯一标识码会被删除,如下图:因为Excel默认会保留第一条记录,而我们要获取每个客户较早的交易日期,需要先对时间进行升序排序,让时间较早的在前面,这样删除时会保留较早的交易日期。删除前后对比如下图:(2)Python实现在Python中,我们使用drop_duplicates()方法,默认对所有值判断重复值,保留第一个(行)默认值。上面的代码是判断所有字段的重复值。我们也可以只针对某一列或者某几列来判断是否删除重复值。我们只需要在drop_duplicates()方法中指定要判断的列名即可。也可以使用多列去重,只需将多个列名以列表的形式传递给参数子集即可。例如,按名称和唯一标识符进行重复数据删除。也可以自定义删除重复时保留哪一个,默认保留第一个,也可以设置保留最后一个,或者都不保留。通过传入参数keep来设置。参数keep的默认值为first,表示保留第一个值;也可以是last,表示保留最后一个值;也可以为False,表示删除所有重复值。3.异常值的检测和处理异常值是与正常数据相比过高或过低的数据。例如,一个人的年龄是0岁或300岁。.1.异常值检测处理异常值,首先要做的就是检测异常值,即发现异常值。查找异常值的方法主要有以下三种。●根据业务经验划定不同指标的正常范围,超出该范围的数值视为异常值。●通过绘制箱线图,大于(小于)箱线图上边缘(下边缘)的点称为离群点●如果数据服从正态分布,则可以使用3σ原则;如果偏差超过三个标准偏差,那么我们认为这个值是异常值。箱线图如下图所示:下图是一个正态分布图,我们将大于μ+3σ的值称为离群值。2.异常值的处理异常值的处理一般有以下几种方法:●最常用的处理方法是删除。●将离群值视为缺失值。●将异常值作为特例,研究异常值产生的原因。(1)Excel实现在Excel中,删除离群值,只需要通过过滤找出离群值对应的行,然后点击鼠标右键选择删除即可。填充异常值实际上就是替换异常值。也是先用过滤功能找出离群值,然后用要填充的值替换这些离群值。(2)Python实现在Python中,删除异常值的方法与Excel中的方法类似。在Python中,通过过滤删除异常值。比如df表中有age的索引。如果要删除age大于200的values,可以过滤掉age不大于200的,过滤掉的部分是删除大于200的values后的新表,填充异常值就是替换异常的值,replace()方法可以用来替换特定的值。四、数据类型转换1、数据类型(1)Excel实现Excel中常用的数据类型是菜单栏中数字选项下面的几种。可以选择其他数据格式,如下图所示:在Excel中,只需选择Forasomecolumn,即可在菜单栏中看到该列的数据类型。选择交易时间列时,菜单栏会显示日期,说明交易时间列的数据类型为日期格式,如下图所示:(2)Pandas的Python实现不像详细如Excel,主要有6种数据类型,如下图所示:某一列的数据类型。2.类型转换前面我们说过,不同数据类型的数据可以做不同的事情,所以我们需要对数据进行类型转换,将数据转换成我们需要的类型。(1)Excel实现如果要改变Excel中某列的数据类型,只需选中该列,然后通过数字菜单栏中的下拉菜单选择要转换的目标类型即可。下图是将文本类型的数据转换为数值类型的数据。数值类型的数据默认保留两位小数,也可以设置为其他位数。(2)Python实现在Python中,我们使用astype()方法进行数据类型的转换,astype后的括号表示要转换的目标类型。5.索引设置索引是查找数据的基础,设置索引的目的就是方便我们查找数据。比如你去超市买了很多食材。回家后,将它们放入冰箱。放它们的过程其实就是建立索引的过程。比如把蔬菜放在冰箱里,把肉放在冰箱里,这样找的时候可以很快找到。1.为非索引表添加索引。有些表没有索引。在这种情况下,应向此类表添加索引。(1)Excel实现在Excel中,一般都有索引。如果没有索引,数据看起来会很乱。当然,也会有例外。数据表没有索引。这时候插入一行和一列就是给表加一个索引。添加索引前后对比如下图,序号列为行索引,字段名为列索引。(2)Python是用Python实现的。如果表没有索引,默认会使用从0开始的自然数作为索引,例如:将列索引值传递给表df的columns参数,将index参数传递给行indexvaluetoreach为非索引表添加索引的目的具体实现如下:2.重置索引重置索引一般是指行索引的设置。有些表虽然有索引,但并不是我们想要的索引。比如有一张表,是用流水号作为行索引,我们想用订单号作为行索引。如何实现?(1)Excel实现在Excel中重新设置行索引比较简单。如果要将其用作行索引,只需将列拖到第一列即可。(2)Python实现在Python中,可以使用set_index()方法重新设置索引列,并在set_index()中指定要用作行索引的列名。重置索引时,也可以将两个或多个列名传入set_index()方法。我们把这种利用表中的多个列的方法称为层次索引,层次索引一般用在一列有多个重复值的情况下。下面显示了一个分层索引的示例,其中a、b、c和d每个都有多个重复值。3.RenameindexRenameindex就是修改已有的索引名,也就是更改字段名。(1)Excel实现在Excel中重命名索引比较简单,就是直接修改字段名。(2)Python在Python中实现重命名索引。我们使用rename()方法在rename后括号中指明要修改的行索引和列索引名称。4.重置索引重置索引主要用于层次索引表。重置索引会将索引列作为列返回。下图左边的表中,Z1和Z2是层级索引。索引重置后,Z1和Z2两个索引以列的形式返回,成为两个常规列。在Excel中,我们需要进行这种转换,直接通过复制、粘贴、删除等功能即可实现,比较简单。我们主要讲一下如何用Python来实现。在Python中,使用了reset_index()方法。reset_index()方法常用参数如下:level参数用于指定层次索引转换为列的级别,第一个索引为0级,第二个索引为1级,默认是所有索引,即默认将所有索引都转为列。drop参数用于指定是否删除原有索引,即不作为新列,默认为False,即不删除原有索引。inplace参数用于指定是否修改原始数据表。reset_index()方法常用于数据分组和数据透视表。这是我们近期推出的《Python数据分析入门教程》系列的第二篇文章,后续会持续更新,请继续关注我们!大数据、AI时代,专业人士都在高薪奔跑,你怎么能OUT?马上去:https://www.cda.cn/?seo