【数据分析】Python:处理缺失值的常见方法
在数据分析和机器学习中,缺失值是一种常见的现象。在实际数据集中,某些变量的某些条目可能没有可用的值。处理缺失值是一个重要的数据预处理步骤。在本文中,我们将介绍如何在 Pandas 中处理缺失值。
我们将探讨以下内容:
-
什么是缺失值;
-
如何在 Pandas 中识别缺失值;
-
处理缺失值的常见方法;
-
Pandas 中处理缺失值的代码示例;
- 我们还提供了一个随机生成的包含缺失值的较大数据集,可以使用这个数据集来练习和尝试这些方法。
===
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 中,我们可以使用多种方法来处理缺失值,包括删除包含缺失值的行或列、替换缺失值和插值缺失值等基本方法。此外,我们还可以使用多重插补和高级回归模型等高级方法来提高缺失值处理的精度。希望本文能够帮助更好地处理缺失值,提高数据处理的效率和精度。
题外话
感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。
👉CSDN大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
工具都帮大家整理好了,安装就可直接上手!
三、最新Python学习笔记
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
四、Python视频合集
观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
五、实战案例
纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、面试宝典
简历模板
👉CSDN大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)
若有侵权,请联系删除
相关文章:
【数据分析】Python:处理缺失值的常见方法
在数据分析和机器学习中,缺失值是一种常见的现象。在实际数据集中,某些变量的某些条目可能没有可用的值。处理缺失值是一个重要的数据预处理步骤。在本文中,我们将介绍如何在 Pandas 中处理缺失值。 我们将探讨以下内容: 什么是缺…...
“批量随机字母命名文件,轻松管理你的文件库“
你是否曾经遇到过文件命名混乱,难以管理的问题?为了解决这个问题,我们推出了一款全新的文件改名工具,它可以帮助你批量给文件名添加一个随机字母,让你的文件库更加有序、易于管理。 首先第一步,我们要进入…...
elasticsearch的数据聚合
聚合可以让我们极其方便的实现对数据的统计、分析、运算。例如: 什么品牌的手机最受欢迎? 这些手机的平均价格、最高价格、最低价格? 这些手机每月的销售情况如何? 实现这些统计功能的比数据库的sql要方便的多,而且…...
【网络编程·数据链路层】MAC帧/以太网协议/ARP协议/RARP协议
需要云服务器等云产品来学习Linux的同学可以移步/-->腾讯云<--/-->阿里云<--/-->华为云<--/官网,轻量型云服务器低至112元/年,新用户首次下单享超低折扣。 目录 一、MAC帧 1、IP地址和MAC地址的区别 2、MAC帧协议 3、MTU对IP协议的…...
算法:移除数组中的val的所有元素---双指针[2]
文章来源: https://blog.csdn.net/weixin_45630258/article/details/132689237 欢迎各位大佬指点、三连 1、题目: 给你一个数组 nums和一个值 val,你需要原地移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用…...
Python小知识 - Python爬虫进阶:如何克服反爬虫技术
Python爬虫进阶:如何克服反爬虫技术 爬虫是一种按照一定的规则,自动抓取网页信息的程序。爬虫也叫网页蜘蛛、蚂蚁、小水滴,是一种基于特定算法的自动化程序,能够按照一定的规则自动的抓取网页中的信息。爬虫程序的主要作用就是从一…...
SAP中的新旧事务码
SAP中的新旧事务码 SAP随着新版本的发布,我们知道sap已经更新了很多的程序和TCODE。sap提供了很多新的TCODE来替换旧的TCODE,新TCODE有很多的新特性和新功能。在这个这种情况下,很多旧TCODE就会被废弃。我们如何查找这个替换呢? …...
day3_C++
day3_C 思维导图用C的类完成数据结构 栈的相关操作用C的类完成数据结构 循环队列的相关操作 思维导图 用C的类完成数据结构 栈的相关操作 stack.h #ifndef STACK_H #define STACK_H#include <iostream> #include <cstring>using namespace std;typedef int datat…...
力扣题解(73. 矩阵置零),带注释
题目描述 链接:点我 题解 //法一 使用hashset记录有0的横纵坐标即可 class Solution {public void setZeroes(int[][] matrix) {HashSet<Integer> row new HashSet<Integer>();HashSet<Integer> col new HashSet<Integer>();for(int i 0;i <…...
SpringMVC应用
文章目录 一、常用注解二、参数传递2.1 基础类型String2.2 复杂类型2.3 RequestParam2.4.路径传参 PathVariable2.4 Json数据传参 RequestBody2.5 RequestHeader 三、方法返回值3.1 void3.2 Stringmodel3.3 ModelAndView 一、常用注解 SpringMVC是一个基于Java的Web框架&#…...
百度输入法全面升级,打造首个基于大模型的输入法原生应用
基于文心一言,百度输入法宣布全面升级,打造行业首个“基于大模型的输入法原生应用”,从“输入工具”全面转型为“AI创作工具”。 近日,百度文心一言正式向公众开放。基于文心一言,百度输入法宣布全面升级,打…...
如何解决GitHub 访问不了?小白教程
GitHub 是全球最大的代码开源平台,小伙伴们平时都喜欢在那里找一些优质的开源项目来学习,以提升自己的编程技能。 但是很多小白初探GitHub 发现访问不了,不能访问 通过一下方法绕过这堵墙,成功下载 GitHub 上的项目。过程非常简单…...
龙芯指令集LoongArch——学习笔记(1)
1 龙芯架构 PDF下载链接: https://www.loongson.cn/download/index 1.1 龙芯架构概述 龙芯架构具有 RISC 指令架构的典型特征。 它的指令长度固定且编码格式规整, 绝大多数指令只有两个源操作数和一个目的操作数, 采用 load/store 架构&…...
ubuntu 20.04 docker安装emqx 最新版本或指定版本
要在Ubuntu 20.04上使用Docker安装EMQX(EMQ X Broker)的4.4.3版本,您可以执行以下步骤: 1.更新系统包列表: sudo apt update2.安装Docker: sudo apt install docker.io3.启动Docker服务并设置其开机自启…...
软件测试/测试开发丨学会与 AI 对话,高效提升学习效率
点此获取更多相关资料 简介 ChatGPT 的主要优点之一是它能够理解和响应自然语言输入。在日常生活中,沟通本来就是很重要的一门课程,沟通的过程中表达越清晰,给到的信息越多,那么沟通就越顺畅。 和 ChatGPT 沟通也是同样的道理&…...
CEF内核和高级爬虫知识
(转)关于MFC中如何使用CEF内核(CEF初解析) Python GUI: cefpython3的简单分析和应用 cefpython3:一款强大的Python库 开始大多数抓取尝试可以从几乎一行代码开始: fun main() PulsarContexts.createSession().scrapeOutPages(&q…...
视频集中存储/云存储/磁盘阵列EasyCVR平台分组批量绑定/取消设备功能详解
安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台视频能力丰富灵活,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。视频汇聚融合管理平台EasyCVR既具备传…...
科技成果鉴定测试报告一般包含哪些测试内容?
软件测评报告 一、科技成果评价是需要做第三方软件测评报告,一般是证明技术指标点是否完善,覆盖主要申报内容,应用软件项目科技成果鉴定测试内容: (一)是否完成合同或计划任务书要求的指标; …...
IDEA中的“Deployment“ 将项目直接部署到服务器上
ntelliJ IDEA中的"Deployment"工具栏是一个方便的工具,用于将你的项目直接部署到服务器上。这个工具栏提供了三种部署的方式: 1.Web Server在本地电脑上,并且服务器运行目录也在项目目录下。 2.Web Server在本地电脑上,…...
密室逃脱小游戏
欢迎来到程序小院 密室逃脱 玩法: 判断可生存的空间,鼠标点击屏幕进行人物左右移动,躲避闸道进行生存,每进行一次关卡都会有分数统计,赶紧去闯关吧^^。开始游戏https://www.ormcc.com/play/gameStart/176 html <c…...
【MyBatis】MyBatis项目结构的搭建
Mybatis项目的搭建 依赖 将打包方式添加为jar包 <groupId>com.qinghe.mybatis</groupId><artifactId>Mybatis_demo3</artifactId><version>1.0-SNAPSHOT</version><packaging>jar</packaging>添加如下依赖 <depen…...
Vant组件库入门知识
🙈作者简介:练习时长两年半的Java up主 🙉个人主页:程序员老茶 🙊 ps:点赞👍是免费的,却可以让写博客的作者开兴好久好久😎 📚系列专栏:Java全栈,…...
Java字符串查找
目录 1.查找字符 (1)以索引查找字符 (2)以字符查找索引 2.查找字符串 在给定的字符串中查找需要的字符或字符串是常见的操作,以下是String类中常用的查找方法。 1.查找字符 查找字符分为两种情况:一种…...
2023年7月京东投影仪行业品牌销售排行榜(京东大数据)
鲸参谋监测的京东平台7月份投影仪行业销售数据已出炉! 7月份,投影仪市场呈现增长趋势。根据鲸参谋平台的数据可知,7月京东平台投影仪的销量将近20万,同比增长约16%;销售额将近3.8亿,同比增长约4%。 *数据…...
设计模式-01简单工厂模式详解 详细代码对比
目录 ChatGpt问答原生代码简单工厂模式代码 简单工厂模式(Simple Factory Pattern)新增boat 对比两种方法原生代码为什么使用强制转换?简单工厂模式 简单工厂方法总结与原生代码的区别:优点:缺点: 参考 本文将介绍什么…...
IPD-PDT-POP角色的名称、定位和职责说明书
在IPD推进中,有一个不是很关键但却离不开的角色叫做POP,POP这个角色通常是设置在PDT团队中。 那么IPD的PDT团队中的POP这个角色到底是什么意思呢?POP如何开展工作,以及POP的主要岗位职责有哪些呢?华研荟今天给大家分享…...
在MySQL中查看数据库和表的数据大小
在MySQL中查看数据库和表的数据大小 在管理和维护MySQL数据库时,了解数据库和表的数据大小是非常重要的。这可以帮助您监控数据库的增长、优化性能以及规划存储需求。本博客将介绍如何使用SQL查询来查看MySQL数据库和表的数据大小。 查看MySQL数据库的总数据大小 …...
Android前端音视频数据接入GB28181平台意义
技术背景 在华脉智联研发Android平台GB28181前端音视频接入模块之前,业内听到最多的是,如何用Android端在没有国标摄像头设备的前提下,模拟GB28181的信令和媒体流交互流程,实现GB28181整体方案的测试。 Android端真的没有必要做…...
Ubuntu 20.04上docker安装Redis
要在Ubuntu 20.04上使用Docker安装Redis,您可以按照以下步骤进行操作: 1.更新系统包列表:sudo apt update2.安装Docker:sudo apt install docker.io3.启动Docker服务并设置其开机自启动:sudo systemctl start docker …...
linux 压缩webfile文件夹 webfile.tar.gz和webfile.tar的区别
linux 压缩webfile文件夹 在Linux中,你可以使用tar命令来压缩文件夹。以下是将文件夹压缩为名为"webfile.tar"的示例命令: cd到webfile所在的文件夹,然后执行 tar -cvf webfile.tar webfile/上述命令中,-c选项表示创建…...
做网站地图/营销咨询
String.prototype.anchor() anchor()方法用于创建一个<a>html描元素 const str 我是html内容.anchor(我是name属性值) console.log(str) // "<a name"我是name属性值">我是html内容</a>" String.prototype.bold() bold()方法用于创建&l…...
建设工程项目查询网站/如何关闭2345网址导航
BadImageFormatException,未能加载正确的程序集XXX的解决办法 IDE:VS2010 语言:C# 异常:System.BadImageFormatException,未能加载正确的程序集XXX或其某一依赖项。。。 一般是由于目标程序的目标平台与其某一依赖项的…...
怎么做赌博网站/培训心得体会模板
锅炉给水泵的结构图与选型方式介绍着我国工业的发展,许多企业规模不断扩大,作为提供动力源的锅炉也随之增加,而在非锅炉行业的企业中精通锅炉专业的人很少,精通锅炉辅机的人就更少,这就给企业在锅炉辅机的选型上带来一…...
做网站公司的出路/安卓手机优化神器
编辑推荐:内容简介: 《C语言程序设计项目教程》以C语言基础知识→核心技术→高级应用为主线,以项目为背景,采取任务驱动的方法来组织编写,全书深入浅出地讲解了C语言的各项技术,并以大量的实例来加深读者对知识的理解和运用。在…...
小程序源码安装/广州seo网站管理
描述给定一个有向图,图节点的拓扑排序被定义为:对于每条有向边A--> B,则A必须排在B之前 拓扑排序的第一个节点可以是任何在图中没有其他节点指向它的节点 找到给定图的任一拓扑排序你可以假设图中至少存在一种拓扑排序说明Learn mor…...
微信微商城平台/seo优化外包
/*这题的dp思路挺巧妙,dp[i][j]记录当长度为i时,末位为j的,并且满足题目要求的,取法...并且还除以了截至该位,占所有排列的概率(每次更新dp,都有除以(1k) )解析见:http://blog.csdn.net/codebat…...