导读

作为一名数据分析师,每天都在完成各种数据分析需求,其中数据清洗是必不可少的一个步骤。一般而言,当提及数据清洗时,其实是主要包括了缺失值处理、重复值处理和异常值处理三类操作,本文即围绕这这三个方面介绍一下个人的一些习惯操作。

01 缺失值处理

缺失值是各类数据集中经常会遇到的情形,相较于工整完全的数据记录,带有一定的缺失值更接近于数据的真实原貌。一般而言,缺失值处理的原则无非就是以下三种:

  • 缺失比例较小,可直接过滤掉缺失值所在行

  • 缺失比例较大,根据特定的业务理解进行一定规则的填充

  • 缺失记录有特定业务含义,不做任何处理

至于在实际数据分析中应该采取哪种方案来处理,这个要结合具体的数据分析场景和业务需求,不可一概而论。所以,这里仅给出基于Pandas的具体处理方法。

1. 过滤掉缺失值所在行

在过滤之前,首先要分析缺失比例的大小,其基础在于判断各个值是否为空,pandas提供了4个相关API,包括

  • isna, is,二者等价

  • notna, not,二者等价

这四个函数用法也非常显然了,前两个用于判断各元素是否为空,后两个则用于判断各元素是否非空。4个函数返回值元素类型均为Boolean值,所以可进一步嵌套一层mean函数直接计算缺失比例。例如:

在完成缺失值比例分析的基础上,断定可以直接过滤掉缺失值,那么仅需执行如下操作即可:

2. 对缺失值进行填充

有些情况下,对缺失值直接进行过滤会导致样本分布受到影响。同时基于特定的业务理解,可以采取一定的规则进行填充,一般而言填充的方式包括两大类:特定值和特定规则。缺失值的填充API主要是用fillna,当然也可手动用缺失值筛选+赋值的形式完成这一操作。

  • 特定值填充。特定值填充一般是对缺失的位置填充某种特定值,当然这里的特定值一般又可细分为3种情况:常数,均值,众数,其中均值填充主要适用于取值连续的情形,而众数填充则适用于取值离散的情形,常数值填充则是基于特定的业务含义。举个例子:

  • 特定规则填充。在某些不适合利用常数值填充的情况下时,基于特定场景可基于特定规则填充,例如得到疫情期间各地累计感染人数,当某地某天的感染人数最新数字缺失时,我们可以用其前一天的感染人数填充。这实际上就是前向填充,类似地还有后向填充。再比如,获取一天各时刻的温度值,当某一时刻温度数据缺失时,那么实际上可基于前后记录拟合插值的方式填充。

02 重复值处理

与缺失值一样,重复值也是数据分析中经常遇到的一种情形,一般是由于样本重复记录或重复读取造成。当然,根据特定的分析场景和业务需求,对于重复值的处理实际上也包含两种情况:

  • 对重复值进行过滤

  • 重复值存在合理性,不做处理

这里仅给出需过滤重复值时的处理方法。既然要过滤掉重复值,那么首先要判断哪些是重复值,pandas中提供接口为duplicated,具体如下:

类似地,执行重复值过滤的接口为drop_duplicates,仍然可选keep参数保留不同不同的重复记录:

另外,在某些情况下不需要针对所有列进行重复值判断,而是仅在特定几列范围内展开去重,此时drop_duplicates还可选一个参数subset,接收列名序列。

03 异常值处理

不同于缺失值和重复值那样规则相对明朗,异常值的处理相对更为复杂。首先要基于业务理解出什么情况下算作是异常值,其次还要指定异常值的处理规则,要么是对异常值所在记录进行过滤,要么是按照一定的规则进行转换,使得异常值变为"正常值"。

就个人目前所应用到数据处理而言,常用的异常值判断规则包括如下几类:

  • 基于数值范围,对于取值连续的情形,可判断数值的绝对大小是否在合理范围,分布是否在箱线图之间,例如车速的大小一般可用[0, 120]作为合理区间进行判断;对于取值离散的情形,可判断取值是否在指定的候选集之间,例如性别的取值范围可能包括男、女和未知三种。

  • 基于特定业务含义,例如每条记录中的两个字段对应了明确的大小或先后关系,当不满足这一关系时可判断为异常值。例如城市抓拍过车记录中,对于一条包括出发时间和到达时间的车辆行驶记录,当到达时间小于等于出发时间时,或者到达时间与出发时间的时间差小于某个阈值时,都可以认为是异常记录

  • 基于特定业务含义,单条记录并无异常,但放在整个数据集中则是异常记录。例如仍以城市抓拍车辆出行为例,虽然从单条记录来看并无异常之处,但对于整个数据集来看,某车牌号在全天仅出现1次,那么相较于该车牌号确实仅出现1次而言,认为该记录中的车牌号识别错误的可能性更为合理,因为该条记录也应认为是异常记录。

这里以某真实GPS数据集为例,原始数据集如下:

以上述三种异常值的清洗需求为例,其执行流程分别如下:

1. 清洗单字段取值异常的记录

以速度字段为例,首先判断其取值分布情况:

绘图接口:seaborn.boxenplot

显然,无论是从箱线图来看,还是从绝对取值来看,都有一部分速度值异常的记录,为了过滤掉这些记录,可直接用query实现,query的具体用法可参考历史文章Pandas用了一年,这3个函数是我的最爱……

2. 根据记录内部条件过滤异常值

这里,我们暂时脱离GPS数据中的具体含义,假设给定规则为run_status≥status,否则视为异常记录,那么执行这一过程的方法为:

更一般地,要求run_status-status>=1,则可用如下方法实现:

3. 基于整个数据集进行整体判断

在以上数据集中,假定device_no对应了唯一GPS终端信息,现在要求各终端在整个数据集中要求至少出现10次,否则认为其为异常记录,例如某device_no在整个数据集中仅出现了9次,那么认为这9条记录均为异常记录而需要清洗。实现方法也有很多,但借助groupby+transform可轻松实现这一清洗过程:

今天给大家推荐一本机器学习、深度学习的人都应该听说过一本经典教材: 《Pattern Recognition and Machine Learning》,中文译名《模式识别与机器学习》,简称 PRML。 出自微软剑桥研究院实验室主任 Christopher Bishop 大神之手。 对,就是豆瓣评分 9.5 的这本书。

资料获取方法

2. 后台回复关键词: PRML

回复「PRML」即可获取资料

pandas 提取某几列_用pandas做数据清洗,我一般都这么干相关推荐

  1. pandas 提取某几列_用Pandas做数据清洗,我一般都这么干……

    导读:​作为一名数据分析师,每天都在完成各种数据分析需求,其中数据清洗是必不可少的一个步骤.一般而言,当提及数据清洗时,其实是主要包括了缺失值处理.重复值处理和异常值处理三类操作,本文即围绕这这三个方 ...

  2. pandas 提取某几列_【科学计算工具二】初识Pandas

    和Numpy最大的不同,Pandas的数据有对应的index. 一.Series数组 Series 是带有标签的一维数组,可以保存任何数据类型(整数,字符串,浮点数,Python对象等),轴标签统称为 ...

  3. pandas转mysql特定列_在pandas.DataFrame.to_sql时指定数据库表的列类型

    问题 在数据分析并存储到数据库时,Python的Pandas包提供了to_sql 方法使存储的过程更为便捷,但如果在使用to_sql方法前不在数据库建好相对应的表,to_sql则会默认为你创建一个新表 ...

  4. pandas打印某一列_一场Pandas与SQL的巅峰大战

    作为一名数据分析师,平常用的最多的工具是SQL(包括MySQL和Hive SQL等).对于存储在数据库中的数据,自然用SQL提取会比较方便,但有时我们会处理一些文本数据(txt,csv),这个时候就不 ...

  5. pandas打印某一列_零基础学Python--不得不说的Pandas小技巧

    在前面的文章里,我介绍了如何使用Pandas去读写一个CSV文件,其实Pandas的功能还不仅仅限于此,它还可以读写Excel.Hdf.html.Json等多种文件格式.除此以外,Pandas还拥有众 ...

  6. python提取文件指定列_如何从csv文件中提取特定列并使用python绘图

    我有一个csv文件,其中包含以下几行数据:# Vertex X Y Z K_I K_II K_III J 0 2.100000e+00 2.000000e+00 -1.000000e-04 0.000 ...

  7. pandas读取csv某一列_让pandas处理大数据速度变快的三个技巧

    上一篇文章 写的是处理GB级数据时datatable比pandas会更高效,但是datatable使用起来毕竟不如pandas来的顺手.所以今天准备介绍pandas的三个使用技巧来让我们的运行效率提高 ...

  8. python怎么选取不连续的列_用pandas中的DataFrame时选取行或列的方法

    如下所示: import numpy as np import pandas as pd from pandas import Sereis, DataFrame ser = Series(np.ar ...

  9. pandas归一化某一列_十分钟带你了解pandas常用方法

    pandas常用知识 一.读取csv文件为dataframe 二.dataframe的数据概况 三.取列数据 四.取行数据 五.取某一单元格数据 六.缺失值处理 七.归一化处理 八.排序 九.索引重新 ...

最新文章

  1. 学习《Linux设备模型浅析之驱动篇》笔记(一)
  2. 2021年中国工业互联网安全大赛核能行业赛道writeup之入门的黑客
  3. 关于UUID的二三事
  4. diamond专题(一)-- 简介和快速使用
  5. 0与1c语言编译,C语言程序设计(07776-1)第11章编译预处理课案.ppt
  6. oracle异机expdp备份,关于通过dblink和expdp进行数据库备份的操作步骤
  7. [Usaco2008 Feb]Eating Together麻烦的聚餐
  8. Linux中cut命令的使用
  9. STL容器底层数据结构的实现
  10. 使用Async对Angular异步代码进行单元测试
  11. 汇智创科机器人_【汇智创科机器人招聘信息】-看准网
  12. cv resource
  13. 跨server传输数据注意事项
  14. Exchange 2007 前端 IIS 内存占用过高
  15. leecode:707. 设计链表
  16. Excel教程:7个极具技巧的公式嵌套,收藏用一辈子
  17. mac清除ps缓存 mac系统存储空间清理
  18. flash player官网地址 建议不要下载flash.cn的
  19. Cocos2d-x 实现地图滚动,解释缝隙产生的原因以及解决方案
  20. 移远 EC200S 模组(4G Cat.1 通信模组)AT指令测试 TCP/UDP 通信过程

热门文章

  1. 用python玩转数据第三周_《用Python玩转数据》-03 数据获取与表示
  2. igs无法分配驱动器映射表_左神算法基础:哈希函数和哈希表
  3. Android4.4之Camera2预览流程APP到Driver(十四)
  4. SpringBoot之可视化api
  5. 图像处理自学(六):图像增强算法总结
  6. Educoder Basemap和seaborn 第三关:Basemap
  7. 远程桌面连接-GPU加速
  8. java disp()_【matlab】输出显示函数 sprintf()disp()
  9. Visual Studio 2019报错:缺少mfc120.dll
  10. java家谱树_青锋家谱系统-基于springboot+orgtree的青锋家谱树管理系统