【数据分析】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…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
