当前位置: 首页 > news >正文

python数据分析及可视化(七)pandas数据清洗,显性问题(异常、缺失、重复),隐形问题(离散、面元、字符串)

数据清洗

数据清洗是指我们拿到数据的格式、内容不方便直接做分析工作。比如要做土豆丝,买到土豆(拿到原数据)后不会直接做成菜,要先把土豆洗一下去掉泥土(相当于数据清洗),根据需求把土豆切成想要的形状(按照需求把数据进行规整),然后下锅炒,装盘(相当于数据分析的可视化,把数据通过图表的形式展现出来)。
针对数据中的问题展开进行清洗,不同数据的清洗方式不同,分为数据中显性的问题(拿到数据就可以看到数据中存在的问题,如土豆发芽、泥土等)和隐形问题。
显性问题具体表现在异常数据,如列名称不规范;列名称重复出现;缺失数据;重复数据(求平均值影响比较大,机器学习中重复数据影响较小)。
隐性问题具体表现在数据类型、字符串、极端异常值等。
在这里插入图片描述
导入数据后的显示形式为
在这里插入图片描述
此时导入了2010条数据

数据中显性问题的处理

1.异常数据

异常数据直接进行删除。比如删除行索引为4和9的行,用drop进行删除。
在这里插入图片描述
删除后数据的条数为2008条,但是索引还是显示到2009,我们就需要重新生成索引。
在这里插入图片描述
可用reset_index(),来生成新的索引对象,此时原索引会作为一列数据存放到表中。
在这里插入图片描述
我们可以在括号内设置drop=True,删除原有的索引对象,重新生成新的索引对象。
在这里插入图片描述
刚才进行删除的时候,是实现知道索引为4和9的行出现重复的内容,而实际操作中并不知道其他行是否也存在重复的数据,我们可以通过布尔索引来选择数据里是否包含标题内容;也可以用判断“nian”里是否包含“年”。
在这里插入图片描述

2.缺失数据

不管有没有缺失数据,都要先进行检测一下。
在这里插入图片描述
检测出有缺失值后,要判断对缺失值的数据是进行填充还是删除,这个表中缺失的是汽车的原价,每种汽车的品牌和生产日期均不一致,无法进行填充,且缺失的数据量相对于总数据量较小,所以这个表中对缺失值进行删除。
如果缺失的是地点,可以根据上下行进行填充。
在这里插入图片描述

3.重复数据

拿到的数据量很大,不可能对每一条数据进行检查,看是否存在重复值。要对数据进行重复值检测,这里的重复值指的是行里的每一列数据都重复,如数据表中车的类型、年份、里程、地点、售价、原价均一样,说明这条数据是重复的。如果1班和2班均有个学生叫“小明”,这个小明不是重复的。要分类对重复值进行处理,避免对分析结果产生影响,对于重复值数据比较少的,可以直接进行删除。
在对异常数据进行删除后,需要对数据进行重新索引,保证以后可以准确的选择数据。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

数据中隐性问题的处理

我们可以把数据表中的标题改为中文的。
在这里插入图片描述
数据中存在的隐性表现在数据类型(如求汽车的原价减去售价的差价,需把数据转为浮点型)、字符串(数字中去掉字符串,如“万”字)、极端异常值(行驶里程里的万公里与公里的处理)

1.数据类型

数据类型相同的,可以直接进行计算,如k3和k2,k1为字符串则不能一起运算。
在这里插入图片描述

利用函数和映射进行数据转换

在data3中,food列的大小写不统一,提取的时候会出现提取数据不全,可以统一都改成小写。也可以利用映射的关系去添加新的一列,不改变第一列的内容。
在这里插入图片描述
从data3里提取apple时候,第一行不会被提取出来,需要把字符串的大小写改为一致。当需要加上一列内容,把第一列的内容进行映射时,data3[‘class’] = data3[‘food’].map(rela) ,这个时候data3里的Apple和Mango 对应的都是NaN,是因为在rela的字典里,这两个内容没有对应的映射关系,可以增加Apple的映射关系,也可以进行大小写的转换(low.map(rela)),利用转换关系,统一成小写,再进行相应的映射。
在这里插入图片描述
根据映射关系(小写的第一列)添加第三列的数据,并没有对原数据进行更改,更改的返回值,利用返回值去对应映射关系。如果要更改第一列,需要把第一列转换成小写,data3[“food”] = data3[“food”].str.lower() ,然后再进行映射,这样改变了原数组,都改为了小写。

2.离散化和面元划分

创建一个年龄的列表,按照指定的面元进行划分,指定划分的范围为18-25,25-35,35-60,60-100,得到数值所在的数据区间,进而统计数据所在的区间以及相应的数量,也可以改变参数调整区间的闭开方向,在切割时增加参数labels,可以改变默认区间的名称,便于观察。
在这里插入图片描述
按照指定的面元进行划分后,得到数据划分的区间,默认区间是左开右闭,不在任何区间内的值,则为NaN,判断数据所在的区间。
在这里插入图片描述
统计数据所在区间的索引,计算出在每个区间的数据数量,默认显示的结果是按数据量的多少进行排序。
在这里插入图片描述
也可以用right参数调整区间的左右开闭方向,设置参数labels,可以更改区间的名称。

例题1

随机生成20个数的数组,随机分成4个区间,统计每个区间的个数。
在这里插入图片描述

例题2

随机生成20个数的数组,平均分成4个区间或者指定分成数据数量的4个区间。
在这里插入图片描述
在这里插入图片描述

3.字符串操作

数据类型是整型,浮点型,字符串,数值之间的转换,去掉字符串中的汉字然后转为数值型进行运算。

1.字符串函数
2.正则
3.pandas的字符串函数
方法说明
cat实现元素级的字符串连接操作,可指定分隔符
count返回表示字符串是否有指定模式的布尔型数据
extract使用带分组的正则表达式从字符串Series提取一个或多个字符串,结果是一个DataFrame,每组有一列
endswith相当于对每个元素执行 x.endswith(pattern)
startswith相当于对每个元素执行 x.startswith(pattern)
findall计算各字符串的模式列表
get获取各元素的第i个字符
isalnum相当于内置的str.isalnum
isalpha相当于内置的str.isalpha
isdecimal相当于内置的str.isdecimal
isdigit相当于内置的str.isdigit
islower相当于内置的str.islower
isnumeric相当于内置的str.isnumeric
isupper相当于内置的str.isupper
join根据指定的分隔符将Series中各元素的字符串连接起来
len计算各字符串的长度
lower,upper转换大小写,相当于对各个元素执行x.lower()或x.upper()
match根据指定的正则表达式对各个元素执行 re.match,返回匹配的组为列表
pad在字符串的左边、右边或两边添加空白符
center相当于pad(side=‘both’)
repeat重复值。如s.str.repeat(3)相当于对各个字符串执行x*3
slice对Series中的各个字符串进行字串截取
split根据分隔符或正则表达式对字符进行拆分
strip取出两边的空白符,包括新行
rstrip取出右边的空白符
lstrip取出左边的空白符

用字符串函数、正则、pandas字符串函数分别处理数据
在这里插入图片描述
在这里插入图片描述
把data表中的年份,去掉“年”字
在这里插入图片描述
在这里插入图片描述
用“replace”去掉原价和售价中的“万”字,并计算差价。
在这里插入图片描述
“regex” 是规则开关,打开开关,只要值得内容符合规则,就可以进行运算。
在这里插入图片描述
利用“replace” 把“万”替换为空,并把数据类型改为浮点型。
在这里插入图片描述
在这里插入图片描述

在数据分析的各个阶段过程中都会随时用到数据清洗,如在可视化画图的时候,发现有些点是异常值,就要做异常值的去除,数据清洗会不断随着问题的产生一直进行操作。

作业

  1. 读取lianjia.csv文件里的数据
  2. 观察结构,调整列索引顺序(“Region”,“Garden”,“Layout”,“Floor”,“Year”,“Size”,“Elevator”,“Direction”,“Renovation”,“Price”)
  3. 增加一个列关于目前状况(state),是否卖出状态随机设定
  4. 查找楼层低的房子(这里提取低楼层)
  5. 电梯这列存在缺失值,想办法处理下缺失值
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    对于少量的空值可以删除,也可以用填充的方法,根据楼层进行判断,一般小于6层的是都是无电梯的。
    在这里插入图片描述

相关文章:

  • Java实现拼图小游戏(5)—— 美化界面(含源码阅读)
  • 【MySQL从入门到精通】【高级篇】(二十五)EXPLAIN中ref、rows、filtered、Extra字段的剖析
  • C语言数组详解
  • DS | 冲刺阶段考点整理 —— 绪论、线性表、栈与队列、特殊矩阵、串
  • 实验5 循环结构
  • 【漏洞复现-Apache-目录穿越文件读取-RCE】vulfocus/apache(cve_2021_41773)
  • 基于matlab的SVM支持向量机分类仿真,核函数采用RBF函数(提供matlab仿真录像)
  • 机器学习基础:拉格朗日乘子法
  • Matlab 与 Python 基于窗函数的滤波器设计对比 之 凯瑟窗
  • java web开发(从spring boot到spring cloud)
  • 看呆了!二面高德 Java 岗,问了一堆源码,微服务,分布式,Redis,心累
  • 2022华为杯研究生数学建模竞赛B题思路解析
  • 2022华为杯研究生数学建模竞赛E题思路解析
  • 【C语言】学生考勤管理系统
  • 常用的调试技巧(如何检测bug)
  • 收藏网友的 源程序下载网
  • 07.Android之多媒体问题
  • angular2开源库收集
  • CentOS7简单部署NFS
  • Fabric架构演变之路
  • PHP CLI应用的调试原理
  • rc-form之最单纯情况
  • Redux 中间件分析
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • session共享问题解决方案
  • 你真的知道 == 和 equals 的区别吗?
  • 入门级的git使用指北
  • 使用 QuickBI 搭建酷炫可视化分析
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • ( 10 )MySQL中的外键
  • (2)MFC+openGL单文档框架glFrame
  • (6)STL算法之转换
  • (6)添加vue-cookie
  • (floyd+补集) poj 3275
  • (附源码)springboot教学评价 毕业设计 641310
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (七)Knockout 创建自定义绑定
  • (译)计算距离、方位和更多经纬度之间的点
  • (转)Sql Server 保留几位小数的两种做法
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • (状压dp)uva 10817 Headmaster's Headache
  • **PHP二维数组遍历时同时赋值
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例
  • :如何用SQL脚本保存存储过程返回的结果集
  • [Android] Android ActivityManager
  • [Android]Android开发入门之HelloWorld
  • [C#基础知识系列]专题十七:深入理解动态类型
  • [CLR via C#]11. 事件
  • [Deep Learning] 神经网络基础
  • [EFI]DELL XPS13 9360电脑 Hackintosh 黑苹果efi引导文件
  • [HNOI2008]水平可见直线
  • [IE技巧] 让IE 以全屏模式启动
  • [Kubernetes]9. K8s ingress讲解借助ingress配置http,https访问k8s集群应用
  • [leetcode]56. Merge Intervals归并区间