使用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…

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 提供了更强大灵…

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

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

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

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

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;今年资本割完韭菜后留…

Linux:Prometheus的源码包安装及操作(2)

环境介绍 三台centos 7系统&#xff0c;运行内存都2G 1.prometheus监控服务器&#xff1a;192.168.6.1 主机名&#xff1a;pm 2.grafana展示服务器:192.168.6.2 主机名&#xff1a;gr 3.被监控服务器&#xff1a;192.168.6.3 …

codeTop102:二叉树的层序遍历

前言 在已知BFS的方式后&#xff0c;知道每次从队列中取一个节点&#xff0c;就要将这个节点的所有子节点按照顺序放入队列。 难点在于怎么确定将同一层的节点放在一个数组里面的输出&#xff0c;也就是输出一个二维数组&#xff1f; 解决方法: 每次while循环将队列上轮放入的…

Vue2(十):全局事件总线、消息订阅与发布、TodoList的编辑功能、$nextTick、动画

一、全局事件总线&#xff01;&#xff01; 任意组件间通信 比如a想收到别的组件的数据&#xff0c;那么就在a里面给x绑定一个demo自定义事件&#xff0c;所以a里面就得有一个回调函数吧&#xff0c;然后我要是想让d组件给a穿数据&#xff0c;那就让d去触发x的自定义事件&…

洛谷_P2678 [NOIP2015 提高组] 跳石头_python写法

P2678 [NOIP2015 提高组] 跳石头 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) d, n, m map(int,input().split())data [0] for i in range(n):value int(input())data.append(value) data.append(d)def check(mid):now 0cnt 0for i in range(1,n2):if abs(data[now]-da…

机器学习(27)

文章目录 文献阅读1. 题目2. abstract3. 网络架构3.1 Theoretical Results 4. 文献解读4.1 Introduction4.2 创新点4.3 实验过程4.3.1 数据集4.3.2 参数设置 4.4 结论 三、实现GAN1. 任务要求2. 实验结果3.实验代码3.1数据准备3.2 模型构建3.3 展示函数3.4 训练过程 小结本周内…

从0写一个问卷调查APP的第13天-1

1.今日任务 我也只是一个大学生&#xff0c;有什么思路不对的地方给我指出来哟! 分析&#xff1a;上次我们实现了任务调查的插入。但是我们插入的问卷调查只有它的标题&#xff0c;也就是这个问卷调查是什么我们告诉数据库了&#xff0c;但是现在我们还没有给它添加任何问题&…

蓝桥杯真题:幸运数字

这道题可以用 integer.string&#xff08;&#xff09;求每个进制的数&#xff0c;但这里要每一位数相加&#xff0c;所以用这个方法会比较麻烦&#xff0c;如下 import java.util.Scanner; public class Main {public static void main(String[] args) {Scanner scan new Sc…