【数据分析】Python:处理缺失值的常见方法

在数据分析和机器学习中,缺失值是一种常见的现象。在实际数据集中,某些变量的某些条目可能没有可用的值。处理缺失值是一个重要的数据预处理步骤。在本文中,我们将介绍如何在 Pandas 中处理缺失值。

我们将探讨以下内容:

  • 什么是缺失值;

  • 如何在 Pandas 中识别缺失值;

  • 处理缺失值的常见方法;

  • Pandas 中处理缺失值的代码示例;

  1. 我们还提供了一个随机生成的包含缺失值的较大数据集,可以使用这个数据集来练习和尝试这些方法。

===

01.什么是缺失值

缺失值是指数据集中某些变量的某些条目缺少值。这些条目可以是空值、NaN(不是数字)或其他标记。缺失值可能是由于数据输入错误、数据丢失或其他原因导致的。在分析数据集时,缺失值可能会影响结果,因此需要对其进行处理。在 Pandas 中,缺失数据由两个值表示:None:None 通常用于 Python 代码中的缺失数据,NaN :NaN(Not a Number 的首字母缩写词)。

02.如何在 Pandas 中识别缺失值

在 Pandas 中,我们可以使用 isnull() 或 notnull() 函数来识别缺失值。不同之处在于,isnull()函数发现数据中有空值或缺失值的时候返回True,notnull()返回的是False。 这些函数返回一个布尔数组,该数组指示每个元素是否为空值。例如,假设我们有一个数据框 df,我们可以使用以下代码检查缺失值。

import pandas as pd # 创建一个包含缺失值的数据框 df = pd.DataFrame({‘A’: [1, 2, None, 4, None], ‘B’: [5, None, 7, 8, None]}) # 检查数据框中的缺失值 print(df.isnull()) df

输出结果为,如下在第3行第1列和第2行第2列存在缺失值。

        A      B  0  False  False  1  False   True  2   True  False  3  False  False  4   True   True  Out\[2\]:       A    B  0  1.0  5.0  1  2.0  NaN  2  NaN  7.0  3  4.0  8.0

上述代码将检查 df 数据框中的缺失值,并返回一个布尔数组,该数组指示每个元素是否为空值。True 表示该元素是一个缺失值。

03.处理缺失值的常见方法

在处理缺失值时,我们有许多方法可供选择。下面是一些常见的方法,函数形式:dropna(axis=0, how=‘any’, thresh=None, subset=None, inplace=False)

3.1

删除缺失值

删除缺失值是处理缺失值的最简单方法之一。我们可以使用 dropna() 函数从数据框中删除包含缺失值的行或列。例如,如果我们希望删除包含任何缺失值的行,我们可以使用以下代码,其中how默认参数为’any’。

# 删除包含任何缺失值的行 df.dropna()

删除时,有一个how参数介绍如下:

**how:**筛选方式。'any’,表示该行/列只要有一个以上的空值,就删除该行/列;'all’,表示该行/列全部都为空值,就删除该行/列。

我们可以使用以下代码,其中参数all表示该行/列全部都为空值,就删除该行/列。

# 删除的行和列必须都为空值 df.dropna(how=‘all’)

如下所示,第一行代码将所有存在空值的行删除,而第二行代码只是将最后一行全空的值删除。

如果我们希望只要出现缺失值,就删除所在的行,我们可以使用以下代码,设置参数为’any’。

# 只要出现缺失值,就删除 df.dropna(how=‘any’)

如果我们希望删除包含缺失值的列,我们可以使用以下代码:

  # 删除包含缺失值的列  df.dropna(axis=1)

如下所示,其中df是原始的值,运行结果如下可对照结果进行分析。

3.2

替换缺失值

替换缺失值是处理缺失值的另一种常见方法。我们可以使用 fillna() 函数将缺失值替换为其他值。例如,如果我们希望将缺失值替换为 0,我们可以使用以下代码:

# 将缺失值替换为 0 df.fillna(0)

我们还可以使用其他值来替换缺失值。例如,我们可以使用以下代码将缺失值替换为每列的平均值:

# 将缺失值替换为每列的平均值  df.fillna(df.mean())

两处代码的运行结果如下所示,分别对应原始值、缺失值替换。

3.3

插值缺失值

插值是一种更高级的缺失值处理方法。它可以使用现有数据来推断缺失值。我们可以使用 interpolate() 函数在 Pandas 中进行插值。例如,我们可以使用以下代码在每列上进行线性插值:

# 线性插值 df.fillna(df.interpolate())

04.Pandas 中处理缺失值的完整代码示例

下面是完整的在 Pandas 中处理缺失值的代码示例:

import pandas as pd    # 创建一个包含缺失值的数据框  df = pd.DataFrame({'A': \[1, 2, None, 4\], 'B': \[5, None, 7, 8\]})    # 检查数据框中的缺失值  print(df.isnull())    # 删除包含任何缺失值的行  print(df.dropna())    # 删除整行都是缺失值的行  print(df.dropna(how='all'))    # 删除包含任何缺失值的行  df.dropna(how='any')    # 删除包含缺失值的列  print(df.dropna(axis=1))    # 将缺失值替换为 0  print(df.fillna(0))    # 将缺失值替换为每列的平均值  print(df.fillna(df.mean()))    # 线性插值  print(df.interpolate())  print(df.fillna(df.interpolate()))

如上所示,我们先介绍了如何在 Pandas 中处理缺失值。我们讨论了如何识别缺失值,并介绍了处理缺失值的常见方法。我们还提供了一些代码示例,以便您可以在自己的项目中使用。处理缺失值是数据预处理的重要步骤,等下我们再介绍一些高级的缺失值处理方法。

05.高级缺失值处理方法

除了前面提到的基本缺失值处理方法,还有一些高级缺失值处理方法,可以进一步提高数据处理的精度。

5.1

多重插补

多重插补是一种使用现有数据集中其他相关变量的信息来推断缺失值的方法。在 Pandas 中,我们可以使用 fancyimpute 库来执行多重插补。以下是一个示例,结果也如下所示。

from fancyimpute import IterativeImputer # 创建一个包含缺失值的数据框 df = pd.DataFrame({‘A’: [1, 2, None, 4,None], ‘B’: [5, None, 7, 8, None]}) # 使用多重插补 imputer = IterativeImputer() imputed_df = imputer.fit_transform(df) imputed_df

5.2

高级回归模型

对于更复杂的数据集,使用高级回归模型可以进一步提高缺失值处理的精度。例如,可以使用 XGBoost 或 LightGBM 等模型来处理缺失值。以下是一个使用 LightGBM 处理缺失值的示例:

import lightgbm as lgb    # 创建一个包含缺失值的数据框  df = pd.DataFrame({'A': \[1, 2, None, 4,None\], 'B': \[5, None, 7, 8, None\]})    # 定义 LightGBM 模型  params = {      'objective': 'regression',      'metric': 'mse',      'num\_leaves': 5,      'learning\_rate': 0.05,      'feature\_fraction': 0.5  }    # 使用 LightGBM 处理缺失值  dtrain = lgb.Dataset(df.drop('A', axis=1), label=df\['A'\].dropna())  gbm = lgb.train(params, dtrain)  df\['A'\] = gbm.predict(df.drop('A', axis=1))

当然这个代码我们还在调试中呀,可以自己复制运行下~只有自己写了才会更加熟悉代码呀。

结论

在数据处理中,处理缺失值是非常重要的。在 Pandas 中,我们可以使用多种方法来处理缺失值,包括删除包含缺失值的行或列、替换缺失值和插值缺失值等基本方法。此外,我们还可以使用多重插补和高级回归模型等高级方法来提高缺失值处理的精度。希望本文能够帮助更好地处理缺失值,提高数据处理的效率和精度。

---------------------------END---------------------------

题外话

在这里插入图片描述

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。

👉CSDN大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述

👉CSDN大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)

若有侵权,请联系删除

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

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

相关文章

Redis-带你深入学习数据类型list

目录 1、list列表 2、list相关命令 2.1、添加相关命令:rpush、lpush、linsert 2.2、查找相关命令:lrange、lindex、llen 2.3、删除相关命令:lpop、rpop、lrem、ltrim 2.4、修改相关命令:lset 2.5、阻塞相关命令&#xff1a…

appium环境搭建

一.appium环境搭建 1.python3 python3的下载安装这里就不多做介绍了,当然你也可以选择自己喜欢的语音,比如java… 2.jdk 1)下载地址 官网(需登录账号): https://www.oracle.com/java/technologies/downloads/ 百度网盘&…

Qt应用开发(基础篇)——向导对话框 QWizard

一、前言 QWizard类继承于QDialog,为有向导界面需求的应用环境提供了一个框架。 对话框窗口 QDialog QWizard向导对话框是一个拥有队列界面的特殊对话框,向导的目的是引导用户一步一步的完成预设的流程。向导常用于软件安装界面向导、硬件线路安装向导、…

界面控件DevExpress WPF(v23.2)下半年发展路线图

本文主要概述了DevExpress官方在下半年(v23.2)中一些与DevExpress WPF相关的开发计划。 通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 DevExpress …

一起学数据结构(5)——栈和队列

1. 栈的相关定义及特点: 1. 栈的相关定义: 在正式介绍栈的定义之前,首先来回顾一下关于线性表的定义: 线性表是具有相同数据类型的个数据元素的有限序列,其中为表长。当时,可以把线性表看作一个空表&…

SwiftUI 内功加持:“曳光弹“实现自定义样式进度条(ProgressView)

概览 虽然 SwiftUI 已为我们内置了很多常用视图,不过有时我们还是需要根据实际来进一步美化显示或增加功能。 如上图所示,在本篇博文中我们将结合敏捷哲学中一个超级实用的开发技巧:曳光弹,来一步一个脚印循序渐进的实现 Progres…

redisson分布式锁

RLock官网解释 基于Redis的Java分布式可重入锁对象,实现了锁接口。 如果获得锁的Redisson实例崩溃,那么这种锁可能永远挂起在获得状态。为了避免这种情况,Redisson维护了锁看门狗,它在锁持有者Redisson实例活着的时候延长锁过期时…

逻辑回归(Logistic Regression)

1.分类问题 在分类问题中,你要预测的变量 y是离散的值,我们将学习一种叫做逻辑回归 (Logistic Regression) 的算法,这是目前最流行使用最广泛的一种学习算法。 在分类问题中,我们尝试预测的是结果是否属于某一个类(例…

MultipartFile是什么

Multipart是一种file的类型 在我们进行文件上传时所发出的请求,我们页面对请求格式有明确的要求: 1.post提交表单方式 2.编码格式enctype必须是muitipart/form-data,这种格式适合传输数据量大的二进制数据文件 3.类型必须是file类 流程举例&#xf…

软件测试报告有什么用?

报告类型 不同的报告类型有不同的报告用途,以下分类别进行分析 1、登记测试报告 可以用于软件产品的增值税即征即退、软件企业的双软评估以及计算机系统集成资质的材料 2、鉴定\确认测试报告 可以用用于政府项目申报、高新认证、项目结题、创新产品认定、各类政…

Excel怎么批量生成文件夹

Excel怎么批量生成文件夹的链接: https://jingyan.baidu.com/article/ea24bc398d9dcb9b63b3312f.html

C 风格文件输入/输出---直接输入/输出---(std::fread)---(std::fwrite)

C 标准库的 C I/O 子集实现 C 风格流输入/输出操作。 <cstdio> 头文件提供通用文件支持并提供有窄和多字节字符输入/输出能力的函数&#xff0c;而 <cwchar>头文件提供有宽字符输入/输出能力的函数。 从直接输入/输出 文件读取 std::fread 从给定输入流 stream …

MMDetection实验记录踩坑记录

AP值始终为0 在实验MMDetection的DAB-DETR模型进行实验时&#xff0c;AP值始终上不去。 可以看到&#xff0c;在第22个epoch时的AP值仅为0.002 因为在此之前已经运行过YOLOX,Faster-RCNN等模型&#xff0c;所以数据集的设置肯定是没有问题的&#xff0c;而博主也只是修改了DAB…

Qt包含文件不存在问题解决 QNetworkAccessManager

这里用到了Qt的网络模块&#xff0c;在.pro中添加了 QT network 但是添加 #include <QNetworkAccessManager> 会报错说找不到&#xff0c;可以通过在项目上右键执行qmake后&#xff0c;直接#include <QNetworkAccessManager>就不会报错了&#xff1a;

java获取jenkins发布版本信息

一.需求&#xff1a; 系统cicd发布时首页需要展示jenkins发布的版本和优化内容 二.思路: 1.jenkins创建用户和秘钥 2.找到对应构建任务信息的api 3.RestTemplate发起http请求 三.实现&#xff1a; 1.创建用户和token 2.查找jenkins API 创建 Job POST http://localhost…

Flask狼书笔记 | 06_电子邮件

文章目录 6 电子邮件6.1 使用Flask-Mail发送6.2 使用事务邮件服务SendGrid6.3 电子邮件进阶6.4 小结 6 电子邮件 Web中&#xff0c;我们常在用户注册账户时发送确认邮件&#xff0c;或是推送信息。邮件必要的字段包含发信方(sender)&#xff0c;收信方(to)&#xff0c;邮件主题…

【vue2第十四章】 插槽(普通插槽、具名插槽、作用域插槽语法)

插槽 插槽是什么&#xff1f; 在 Vue 2 中&#xff0c;插槽&#xff08;slot&#xff09;是一种用于定义组件内部内容分发的机制。它允许你将组件中的一部分内容替换为用户自定义的内容&#xff0c;并在组件内部进行渲染。 通过在组件模板中使用 <slot></slot> 标…

常见IO模型(非常详细)

背景知识 常⽤5中⽹络IO模型 阻塞IO&#xff08;Blocking IO&#xff09;⾮阻塞IO&#xff08;Non-Blocking IO&#xff09;多路复⽤IO&#xff08;IO Multiplexing&#xff09;信号驱动IO&#xff08;Signal Driven IO&#xff09;异步IO&#xff08;Asynchronous IO&#x…

纯css实现奥运五环、3D平移、旋转、扭曲

文章目录 前言效果图htmlcss 前言 1、不是真正的五环&#xff0c;因为通过形变得来。 2、不同电脑显示器的像素不同&#xff0c;显现的效果不同。 3、不推荐使用此方法。 4、主要通过旋转加平移的方式实现。 效果图 html <div class"olympic_rings"><span …

我眼中的《视觉测量技术基础》

为什么会写这篇博客&#xff1a; 首先给大家说几点&#xff1a;看我的自我介绍对于学习这本书没有任何帮助&#xff0c;如果你是为了急切的想找一个视觉测量的解决方案那可以跳过自我介绍往下看或者换一篇博客看看&#xff0c;如果你是刚入门想学习计算机视觉的同学&#xff0…