使用pandas进行数据清洗

  • 采集到原始的数据中会存在一些噪点数据,噪点数据是对分析无意义或者对分析起到偏执作用的数据。
  • 如何清洗:
    • 清洗空值/缺失值
    • 清洗重复值
    • 清洗异常值

import pandas as pd
from pandas import DataFrame,Series
import numpy as np

pandas处理空值操作

  • isnull
  • notnull
  • any
  • all
  • dropna
  • fillna

df = DataFrame(data=np.random.randint(0,100,size=(7,5)))
df.iloc[0,3] = np.nan
df.iloc[3,3] = None
df.iloc[2,2] = np.nan
df.iloc[5,3] = np.nan
df
在这里插入图片描述

  • 缺失值的处理方案:

    • 1.可以将空值对应的行/列进行删除
    • 2.可以将空值进行填充
  • 将空值对应的行进行删除

ret = df.isnull() #可以通过isnull判断df中是否存在空数据
ret
在这里插入图片描述

#监测ret中哪些行存在True(表示df中哪些行存在空值)
ex = ret.any(axis=1) #axis=1表示轴向为行
#any可以对ret表格中的行进行是否存在True的判定,如果存在True,则给该行返回一个True,否则返回False
ex
在这里插入图片描述

#整合后的结果;在df中True对应的行是存在空值
ex = df.isnull().any(axis=1)
ex
在这里插入图片描述

ex = df.notnull().all(axis=1) #all判断每一行中是否全部为True,如果全部为True,则给该行返回True,否则返回False
ex
在这里插入图片描述

df.loc[ex] #一般可以将notall->all返回的结果作为df的行索引,过滤空对应的行数据
在这里插入图片描述

#更简单的过滤空对应的行数据的方式
df.dropna(axis=0) #注意在dropna中的轴向0表示行,1表示列
在这里插入图片描述

#需求:知道df中每一列存在空值的个数/占比
for col in df.columns:
#col表示df的某一列的列索引
#判断列中是否存在空值
if df[col].isnull().sum() > 0:
#计算空值占比
p = df[col].isnull().sum() / df[col].size
#将p小数转换成百分比显示
p = format(p,‘.2%’) #.2%表示将p转换成保留2位小数的百分数
print(col,‘列中存在的空值的占比为:’,p)
在这里插入图片描述

  • 将空值进行填充

#使用任意值对空值进行填充
df.fillna(value=666) #将df中所有的空值填充为666
在这里插入图片描述

#使用有意义的数据对空值进行填充(近邻值)
df.fillna(method=‘bfill’,axis=0) #在竖直方向上选择空后面的元素填充空值
#method填充方式:ffill(向前填充)和bfill(向后填充)
在这里插入图片描述

#使用有意义的数据对空值进行填充(统计值)
#使用列的均值填充列的空值
for col in df.columns:
if df[col].isnull().sum() > 0:
mean_value = df[col].mean()
df[col].fillna(value=mean_value,inplace=True)
df
在这里插入图片描述

  • 注意:实现空值的清洗最好选择删除的方式,如果删除的成本比较高,再选择填充的方式。

处理重复数据

  • 基于duplicated和drop进行删除重复行操作

df = DataFrame(data=np.random.randint(0,100,size=(8,5)))
df.iloc[3] = [0,0,0,0,0]
df.iloc[5] = [0,0,0,0,0]
df.iloc[7] = [0,0,0,0,0]
df
在这里插入图片描述

#如何监测数据中是否存在重复的行数据
df.duplicated() #可以监测原始数据中哪些行是重复,重复则返回True,否则返回False
在这里插入图片描述

df.duplicated().sum() #说明df这组数据中有2行重复的行数据
2
df.drop_duplicates(inplace=True) #直接删除数据中重复的行数据
df
在这里插入图片描述

处理异常/离群数据

异常值是分析师和数据科学家常用的术语,因为它需要密切注意,否则可能导致错误的估计。简单来说,异常值是一个观察值,远远超出了样本中的整体模式。

异常值在统计学上的全称是疑似异常值,也称作离群点(outlier),异常值的分析也称作离群点分析。异常值是值样本中出现的’极端值’,数据值看起来异常大或异常小,其分布明显偏离其余的观测值。异常分析是检验数据中是否存在不合常理的数据,在数据分析中,既不能忽视异常值的存在,也不能简单地把异常值从数据分析中剔除。重视异常值的出现,分析其产生的原因,常常成为发现新问题进而改进决策的契机。

举个例子,做客户分析,发现客户的年平均收入是80万美元。但是,有两个客户的年收入是4美元和420万美元。这两个客户的年收入明显不同于其他人,那这两个观察结果将被视为异常值。

  • 给定条件的异常数据处理
    • 自定义一个1000行3列(A,B,C)取值范围为0-1的数据源,然后将C列中的值大于其两倍标准差的异常值进行清洗

import pandas as pd
from pandas import DataFrame
import numpy as np

data = DataFrame(data=np.random.random(size=(1000,3)),columns=[‘A’,‘B’,‘C’])
data
在这里插入图片描述

#求出了C列数据的2倍标准差
twice_std = data[‘C’].std() * 2
twice_std
0.5816897093856236
ex = data[‘C’] > twice_std
data.loc[ex] #取出了异常值对应的行数据
在这里插入图片描述

indexs = data.loc[ex].index #取出了异常值对应行数据的行索引
indexs
在这里插入图片描述

data.drop(index=indexs,inplace=True) #在演示数据中将异常值对应的行数据进行清洗
data

  • 标准差法
    • 又称拉依达准则(标准差法),对某些异常数据进行剔除,以提高数据的准确性。
    • 适用场景:
      • 仅局限于对正态或近似正态分布的样本数据处理,且数据量级尽可能大会更加使用。
    • 工作原理:
      • 先假设一组检测数据存在异常数据,对其进行计算处理得到标准偏差σ,然后确定一个区间,认为凡超过这个区间的就是异常数据,则对该数据予以剔除。
      • 标准差本身可以体现因子的离散程度,是基于因子的平均值μ而定的。在离群值的处理过程中,可通过μ ± nσ来衡量因子与平均值的距离(n通常使用3)。
        • 将区间[μ - 3σ,μ + 3σ]的值视为正常值范围,在[μ - 3σ,μ + 3σ]外的值视为离群值。
          在这里插入图片描述

#伪造了一组含有5个异常数据的样本
iris_length = abs(np.random.randn(9999))
#手动添加一些异常数据
iris_length[44] = 54
iris_length[33] = 67
iris_length[22] = 56
iris_length[11] = 87
iris_length[55] = 49
iris_length
在这里插入图片描述

def std_opt(data):
mean_value = data.mean()#均值
std_value = data.std() #标准差
m_min = mean_value - 3 * std_value
m_max = mean_value + 3 * std_value
return m_min,m_max

m_min,m_max = std_opt(iris_length)

for i in iris_length:
if i < m_min or i > m_max:
print(i)
87.0
56.0
67.0
54.0
49.0

  • MAD法
    • 又称为绝对值差中位数法,是一种先需计算所有因子与中位数之间的距离总和来检测离群值的方法,使用大样本数据

    • 公式:设有平稳离散数据X=[x1,x2,…,xn],其数据中位数为X_median:
      在这里插入图片描述

    • 应用场景:

      • 当数据呈对称分布或接近对称分布时MAD和标准差法效果相等或接近相等
      • 当数据为偏态分布,应选择众数或中位数等位置代表值,这时它们的代表性要比均值好。

def median_opt(data):
median = np.median(data)
count = data.size
a = (((data-median)**2).sum()/count)**0.5
m_min = median - 3 * a
m_max = median + 3 * a
return m_min,m_max

median_opt(iris_length)
(-3.9479897059920868, 5.302663263389095)
m_min,m_max = median_opt(iris_length)
for i in iris_length:
if i < m_min or i > m_max:
print(i)
87.0
56.0
67.0
54.0
49.0
源文件可在这里下载:
https://download.csdn.net/download/ak2111/89025242?spm=1001.2014.3001.5501

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/484117.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ppp实验

拓扑图 实验步骤 配置IP地址及创建mp逻辑口 [R1]int ser 3/0/0 [R1-Serial3/0/0]ip add 192.168.1.1 24 [R1-Serial3/0/0] [R2]int se3/0/0 [R2-Serial3/0/0]ip add 192.168.1.2 24 [R2-Serial3/0/0]int mp [R2-Serial3/0/0]int mp-g [R2-Serial3/0/0]int mp-group 0…

中国气象局发布大地磁暴预警:空间站轨道或受影响

什么是地磁暴&#xff1f; 地磁暴作为最典型的太阳爆发活动&#xff0c;一次地磁暴是一次日冕物质抛射过程&#xff0c;能将数以亿吨计的太阳物质以数百千米每秒的高速抛离太阳表面。 不光是巨大质量与速度汇聚成的动能&#xff0c;它们还携带着太阳强大的磁场能&#xff0c;一…

前端基础篇-前端工程化 Vue 项目开发流程(环境准备、Element 组件库、Vue 路由、项目打包部署)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 环境准备 1.1 安装 NodeJs 1.2 验证 NodeJs 环境变量 1.3 配置 npm 的全局安装路径 1.4 切换 npm 的淘宝镜像( npm 使用国内淘宝镜像的方法(最新) ) 1.5 查看镜像…

406. 根据身高重建队列(力扣LeetCode)

文章目录 406. 根据身高重建队列题目描述贪心算法代码 406. 根据身高重建队列 题目描述 假设有打乱顺序的一群人站成一个队列&#xff0c;数组 people 表示队列中一些人的属性&#xff08;不一定按顺序&#xff09;。每个 people[i] [hi, ki] 表示第 i 个人的身高为 hi &…

tabs自定义样式

使用el-tabs 去修改样式的话比较麻烦&#xff0c;索性直接用div来制作。 <div class"contain"><div class"tab_wrap"><div :class"[skew, first, active 1 ? isActive: ]" click"tabClick(1)"><span class&quo…

HTTP --- 下

目录 1. HTTP请求方式 1.1. HTML 表单 1.2. GET && POST方法 1.2.1. 用 GET 方法提交表单数据 1.2.2. 用 POST 方法提交表单数据 1.2.3. 总结 1.3. 其他方法 2. HTTP的状态码 2.1. 重定向 2.1.1. 临时重定向 && 永久重定向 2.1.2. 302 &&…

3 Spring之DI详解

5&#xff0c;DI相关内容 前面我们已经完成了bean相关操作的讲解&#xff0c;接下来就进入第二个大的模块DI依赖注入&#xff0c;首先来介绍下Spring中有哪些注入方式? 我们先来思考 向一个类中传递数据的方式有几种? 普通方法(set方法)构造方法 依赖注入描述了在容器中建…

19.严丝合缝的文明——模板方法模式详解

“项目评审的节点又快到了&#xff0c;PPT你写了没&#xff1f;” “Oops&#xff0c;忘了&#xff0c;有模板没&#xff1f;给我一份” 概述 模板&#xff0c;一个频繁出现在办公室各类角色口中的词&#xff0c;它通常意味着统一、高效、经验和优质。各项汇报因为PPT的模板变…

trinus 3d打印机安装调试到成功打印3-没有热床模型脱落底床不粘模型翘边错位

由于没有自带热肠&#xff0c;改装的话需要额外购买配套的热床。但是如果手头没有的话&#xff0c;那只能使用原厂赠送的两张美文纸。美纹纸很容易用破&#xff0c;尤其是喷头可能会划破。另外拆模型的时候会引起气泡。 于是翘边和模型脱落就成了家常便饭。 这些问题的根源都在…

C#学习笔记1:C#基本文件结构与语法

现在开始我的C#学习之路吧&#xff0c;这也许不适合0编程基础的人看&#xff0c;因为我会C语言了&#xff0c;笔记做的可能有思维上的跳跃&#xff0c;如果0基础可能会觉得有些地方转折得莫名奇妙&#xff0c;但我的学习笔记实操还是比较多的&#xff0c;基本都是真实运行程序结…

七.(1)堆排序--前传

目录 七.(1)堆排序--前传 20-堆排序前传-树的基础知识 根节点 叶子节点 树的深度(高度) 树的 度 孩子节点/父亲节点 子树 21.堆排序前传-二叉树的基础知识 二叉树的存储方式: 22-堆排序前传-堆和堆的向下调整 什么是堆? 堆的向下调整性质 23-堆排序的过程演示 七…

Android Preference简单介绍

Android Preference简单介绍 文章目录 Android Preference简单介绍一、前言二、Preference 简单介绍二、PreferenceScreen和SwitchPreference 简单示例2、相关demo代码示例&#xff08;1&#xff09;SettingsActivity.Java&#xff08;2&#xff09;layout\settings_activity.x…

redis复习笔记07(小滴课堂)

在线教育-天热销视频榜单实战-List数据结构设计 我们先随机获取整个列表的内容。 我们模拟一个去添加数据的接口&#xff1a; 运行&#xff1a; 我们可以看到这里的数据。 我们现在启动我们的应用和controller&#xff1a; 就可以查到我们的数据了。 我们进行人工操作位&…

基于unbantu的nginx的配置

目录 前言: 1.安装nginx并进行测试 1.1使用nginx -v 命令查看版本 1.2开启服务 查看端口 1.3测试 2.nginx的静态资源访问配置 2.1创建静态资源存放的目录 2.2写入目录中测试文件对应的内容 2.3修改配置文件 2.4 测试 3.虚拟主机配置 3.1创建目录 3.2写入测试…

PPP MP配置

一.添加接口 每个路由器中添加2SA接口 二.配置IP地址 1.在r2和r3上创建MP [r2]int Mp-group 0/0/0 [r2-Mp-group0/0/0] [r3]int Mp-group 0/0/0 [r3-Mp-group0/0/0] 2.把1中上的接口加入上一步创建的MP [R2]int Serial 3/0/1 [R2-Serial3/0/1]ppp mp Mp-group 0/0/0 [R2]i…

Learn OpenGL 24 点光源阴影

点光源阴影 上个教程我们学到了如何使用阴影映射技术创建动态阴影。效果不错&#xff0c;但它只适合定向光&#xff0c;因为阴影只是在单一定向光源下生成的。所以它也叫定向阴影映射&#xff0c;深度&#xff08;阴影&#xff09;贴图生成自定向光的视角。 本节我们的焦点是…

整数和浮点数分别在内存中的存储

目录 一、整数在内存中的存储二、浮点数在内存中的存储2.1存储2.2取2.2.1 E不全为0或者不全为12.2.2 E全为02.2.3 E全为1 三、题目解析 一、整数在内存中的存储 对于整形来说&#xff1a;数据存放内存中其实存放的是补码。 原因在于&#xff0c;使用补码&#xff0c;可以将符号…

Redis 6和7:探索新版本中的新特性

码到三十五 &#xff1a; 个人主页 心中有诗画&#xff0c;指尖舞代码&#xff0c;目光览世界&#xff0c;步履越千山&#xff0c;人间尽值得 ! Redis&#xff0c;作为开源的内存数据结构存储系统&#xff0c;以其高性能、丰富的数据结构和广泛的应用场景而深受开发者喜爱。随…

面试题:Java中的类加载器

1. 什么是类加载器&#xff0c;类加载器有哪些? 要想理解类加载器的话&#xff0c;务必要先清楚对于一个Java文件&#xff0c;它从编译到执行的整个过程。 类加载器&#xff1a;用于装载字节码文件(.class文件)运行时数据区&#xff1a;用于分配存储空间执行引擎&#xff1a;…

Zabbix学习(二)

上一篇文章中&#xff0c;我们搭建完了zabbix服务端和客户端&#xff0c;这一章介绍下具体的使用&#xff0c;下面先介绍几个概念。 主机&#xff1a;要监控的主机监控项&#xff1a;你要监控cpu还是内存触发器&#xff1a;当cpu使用率超过多少报警动作&#xff1a;cpu报警了&…
最新文章