使用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.mzph.cn/news/768083.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言中如何动态分配内存并进行操作

C语言文章更新目录 C语言学习资源汇总&#xff0c;史上最全面总结&#xff0c;没有之一 C/C学习资源&#xff08;百度云盘链接&#xff09; 计算机二级资料&#xff08;过级专用&#xff09; C语言学习路线&#xff08;从入门到实战&#xff09; 编写C语言程序的7个步骤和编程…

32 mars3d 官方 demo 可以跑起来, 但是自己拷贝的 demo 跑不起来

前言 这个问题是 同事碰到的一个问题 主要的影响因素在于 官方的 demo 从 mars3d-cesium 中暴露了一部分文件作为 http 服务, 然后 我们自己的 case 里面没有这部分服务, 然后 导致 js 访问不到 以及 大部分的 css, js, img 等等 静态资源 访问不到 Cesium is not define…

【云开发笔记No.11】再说Git

GIT的简介&#xff1a; Git是一个开源的分布式版本控制系统&#xff0c;可以有效、高速地处理从很小到非常大的项目版本管理。它是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。与传统的集中式版本控制系统&#xff08;如SVN&#xff09;不同…

11.创建后台系统项目

后台系统项目 兼容性 vite官网&#xff1a;https://vitejs.dev/ vite中文网&#xff1a;https://cn.vitejs.dev/ vite需要node.js版本 >14.0.0&#xff0c;建议16 node -v 查看版本号 创建项目 进入存放目录 执行命令 npm create vitelatest 选择vue框架 选择typescript…

苍穹外卖笔记

苍穹外卖 DAY01nginx反向代理MD5加密yapi进行接口导入Swagger介绍 DAY02新增员工需求分析和设计写相关代码测试(1. 后端文档测试 2. 前后端联调代码完善 员工分页查询DAY01 02涉及到的知识 DAY01 nginx反向代理 MD5加密 拓展&#xff1a;spring security jwt 提供了更强大灵…

C++ Builder XE关于sndPlaySound播放mp3的处理

#include <vcl.h>#include "mmsystem.h" //我的编译环境&#xff0c;必须放在这才有用&#xff0c;否则会弹出错&#xff0c;不知道什么原因 #pragma hdrstop void __fastcall TForm6::RzToolButton1Click(TObject *Sender) { RzToolButton1->Ima…

登录校验:JWT令牌、Filter、Interceptor

JWT&#xff1a; 全称&#xff1a;JSON Web Token 定义了一种简洁的、自包含的格式&#xff0c;用于在通信双方以json数据格式安全的传输信息&#xff0c;由于数字签名的存在&#xff0c;这些信息是可靠的。 组成&#xff1a; Header(头部)&#xff1a;&#xff08;“alg&q…

回溯、取模、日期计算

C回溯 文章目录 C回溯1、回溯常见模板2、取每位数的模3、回文日期 1、回溯常见模板 /*回溯法模板def func():if 满足条件:return resultfor range 选择列表:选择func()撤销选择 */ 代码示例&#xff1a;1.求1~n的全排列并打印出来。 #include<bits/stdc.h> using names…

银行5G短消息应用架构设计

&#xff08;一&#xff09;RCS简介 1.1 RCS的提出与标准制定 RCS(Rich Communication Services & Suite&#xff0c;富媒体通信)是GSMA(Groupe Speciale Mobile Association&#xff0c;全球移动通信系统协会)在2008年提出的一种通讯方式&#xff0c;RCS融合了语音、消息…

基于STM32的智能快递箱设计与实现

基于STM32的智能快递箱设计与实现 **摘要&#xff1a;**随着电子商务的飞速发展&#xff0c;快递业务日益繁荣&#xff0c;智能快递箱作为解决“最后一公里”配送难题的有效手段&#xff0c;受到了广泛关注。本文设计并实现了一款基于STM32微控制器的智能快递箱系统&#xff0…

springboot3+jdk17+MP整合最新版jersey详细案例,正真做到拿来即用

如题&#xff0c;springboot3.x java17 MP 整合最新jersey&#xff0c;各种请求类型&#xff08;实战/详解&#xff09; 文件上传下载 jersey资源注册 拦截器&#xff08;JWT&#xff09; 跨域处理 全局异常 Valid注解校验 等等 &#xff0c;除非你必须整合security&am…

SpringCloud Alibaba Nacos简单应用(二)

&#x1f600;前言 本篇博文是关于SpringCloud Alibaba Nacos简单应用&#xff0c;希望你能够喜欢 &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的满意是我的…

【spring】@Lazy注解学习

Lazy介绍 Lazy 注解是一个配置注解&#xff0c;用于指示 Spring 容器在创建 bean 时采用延迟初始化的策略。这意味着&#xff0c;除非 bean 被实际使用&#xff0c;否则不会被创建和初始化。 在 Spring 框架中&#xff0c;默认情况下&#xff0c;所有的单例 bean 在容器启动时…

【Linux】模拟实现shell(bash)

目录 常见的与shell互动场景 实现代码 全部代码 homepath()接口 const char *getUsername()接口 const char *getHostname()接口 const char *getCwd()接口 int getUserCommand(char *command, int num)接口 void commandSplit(char *in, char *out[])接口 int execut…

aurora仿真使用等

IP设置 代码 aurora_8b10b aurora_8b10b_inst (/**********************************************************************************///axi_stream tx.s_axi_tx_tdata(s_axi_tx_tdata), // input wire [0 : 31] s_axi_tx_tdata.s_axi_tx_tkeep(s_axi_tx_…

2024开年首展,加速科技展台“热辣滚烫”

3月20日&#xff0c;备受瞩目的半导体行业盛会SEMICON China 2024在上海新国际博览中心盛大启幕&#xff0c;展会汇集了来自全球的半导体领域顶尖企业与专业人士。加速科技作为业界领先的半导体测试设备供应商携重磅测试设备及解决方案精彩亮相&#xff0c;展示了最新的半导体测…

KIMI爆了!对比文心一言和通义千问它到底有多强?

原文:赵侠客 前言 最近国产大模型KIMI爆了大部分人应该都知道了&#xff0c;从我个人的感受来看这次KIMI爆了我不是从技术领域接触到的&#xff0c;而是从各种金融领域接触到的。目前国内大模型可以说是百模大战&#xff0c;前几年新能源大战&#xff0c;今年资本割完韭菜后留…

简述TCP的三次握手与四次挥手

A表示客户client&#xff0c;即主动发起连接的应用程序&#xff1b;B表示服务器&#xff0c;即被动等待连接建立的应用进程。 TCP建立连接&#xff0c;三报文握手&#xff0c;也可以是四报文握手。 总流程可以简化为&#xff1a;A向B发送连接请求&#xff0c;B向A确认&#xf…

JAVA学习-NIO.Files工具类

Java NIO&#xff08;New IO&#xff09;提供了一组用于处理文件和文件系统的工具类&#xff0c;其中包含了Files工具类。Files工具类提供了对文件和目录进行操作的静态方法&#xff0c;如创建、复制、删除、移动、重命名等等。以下是Files工具类的特点、常用方法以及与其他类的…

面试宝典:MySQL索引进阶深度分析

在数据库高级开发的面试中&#xff0c;索引是一个绕不开的重点话题。MySQL中的索引机制对于查询性能有着决定性的影响。本文将深入探讨MySQL索引的高级特性和优化策略&#xff0c;帮助开发者在面试中展现出对数据库索引机制的深刻理解和高级应用能力。 索引的基本概念 MySQL中…