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

2023-11-08

在数据分析和机器学习中,缺失值是一种常见的现象。在实际数据集中,某些变量的某些条目可能没有可用的值。处理缺失值是一个重要的数据预处理步骤。在本文中,我们将介绍如何在 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学习资料,包含面试题、简历资料等具体看下方。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 一起学nRF51xx 8 -  Time

    前言 Nrf518xx的TIMER有以下几部分组成 nrf51822有三个定时器 time0 1 2 1 计数时钟源 有1M 16M 2种时钟源 2 时钟源分频器 用来设置分频 范围是2的0 9次方 3 定时 计数模式选择 用来配置TIME
  • 百度翻译爬虫-使用execjs库逆向解析百度翻译

    本文目标破解百度翻译接口 抓取翻译结果数据 python3安装execjs方法 pip install pyexecjs 检查页面 使用Chrome浏览器打开百度翻译 观察界面 右键查看源代码 发现密密麻麻全是看不懂JS代码 初步判定为是异
  • CVE-2017-11882漏洞复现

    本文记录一下针对CVE 2017 11882的漏洞复现 0x00 前言 参考backlion师傅的PDF 记录一下这个过程 2017年11月14日 微软发布了11月份的安全补丁更新 其中比较引人关注的莫过于悄然修复了潜伏17年之久的Offi
  • 详解c++---优先级队列和仿函数

    目录标题 什么是仿函数 如何定义一个仿函数 什么是优先级队列 优先级队列的使用 模拟实现priority queue 准备工作 top函数的实现 size函数的实现 empty函数的实现 adjustup函数的实现 push函数的实现 po
  • Opencv图像处理(全)

    文章目录 博主精品专栏导航 备注 以下源码均可运行 不同项目涉及的函数均有详细分析说明 11 图像项目实战 一 银行卡号识别 sort contours resize 二 文档扫描OCR识别 cv2 getPerspectiveTransf
  • IntelliJ IDEA 修改 idea64.exe.vmoptions文件修改错误导致软件打不开

    如果修改了idea64 exe vmoptions文件中的参数 然后导致idea打不开 那么此文一定能帮你解决问题 有的小伙伴出现此类问题之后 可能尝试的重装IntelliJ IDEA的方法 但是重装之后发现还是解决不了问题 还是会弹出如下
  • iOS开发判断版本号不同

    判断是否是第一次启动或者版本号不同时 NSString key CFBundleVersion 上一次打开的版本号 存储在沙盒中的版本号 NSString lastVersion NSUserDefaults standardUserDef
  • 串口接收数据分包问题处理(QT上位机/单片机等)

    串口数据出现分包如何正确完整接收 提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 设计思路 二 代码参考 总结 前言 串口通信在QT上位机以及单片机或者安卓串口等使用情况下 经常容易出现一包数据分成几包
  • 基于VS2019 C++的跨平台(Linux)开发——引入

    一 前言 先声明我的服务器是Ubuntu16 04 由标题可知 我的开发工具采用Visual Studio2019 使用c 语言来实现windows linux的跨平台开发 二 关于跨平台 1 什么是跨平台 由百度百科可知 跨平台概念是软件
  • 【Redis】Redis 常用命令

    文章目录 String List Set Hash Zset Geospatial Hyperloglog Bitmap String key value 结构 value 除了字符串还可以是数字 整型 浮点型 set key value
  • 链表排序(冒泡、选择、插入、快排、归并、希尔、堆排序)

    这篇文章分析一下链表的各种排序方法 以下排序算法的正确性都可以在LeetCode的链表排序这一题检测 本文用到的链表结构如下 排序算法都是传入链表头指针作为参数 返回排序后的头指针 struct ListNode int val ListN
  • Echarts 散点图的 tooltip设置跟随鼠标移动,并将显示位置固定在指定大小区域

    问题 在散点图中设置了tooltip后 不设置position 使用默认的配置 toolt的显示位置是跟随鼠标移动的 但是会出现显示不全的情况 如下图 这产品肯定不能忍啦 必须改 于是我去看了echarts的文档 看到tooltip的pos
  • java calendar getactualmaximum_Calendar类的getActualMaximum方法作用(获得某月份实际天数)...

    首先我们看api中对getActualMaximum这个方法的说明 Calendar Java 2 Platform SE 6 public int getActualMaximum int field 给定此 Calendar 的时间值
  • zxing二维码的生成与解码(C#)(附例子)

    二维码的生成 using com google zxing qrcode using com google zxing using com google zxing common using ByteMatrix com google zx
  • 论文笔记-深度估计(2) Fully Convolutional Networks for Semantic Segmentation

    1 介绍 该文讲述的是语义分割 但思路和框架和深度恢复是十分相似的 毕竟当前语义和深度问题本质上是一个像素级的分类问题 从该文3000 引用用量也可见该文章的巨大启发效果 所谓全卷积网络 是指由仅由卷积层 池化层和非线性激活函数层交错组织起
  • Tensorflow报错:AttributeError: 'module' object has no attribute 'summary'

    这是因为API的版本不对 导致AttributeError module object has no attribute summary 想想并没有修改什么 只是服务器被重装了驱动 会不会是这个原因呢 对了 同事说在服务器上装了tensor
  • SectionList 嵌套FlatList实现Grid和Flat列表

    直接上代码 遇到问题查解决方法的时候还是先看官方文档把 百度的博客实在是坑啊 特别是那个某博客的有个sectionlist简直了 sectionlist里竟然来个numColumns 明明没有的事也不知道他哪里偷的文档 结果苦逼的研究半天
  • CSDN 软件开发新手赛正式启动,召集热爱编程的你

    2021年12月21日起 CSDN软件开发新手赛正式启动 此次大赛是基于 C认证 见习工程师能力认证 标准而设立的编程比赛 只要你想成为Java Python 前端 全栈工程师 无论你是职场小白 在校学生还是编程爱好者 皆可免费报名参与 大
  • 安装mmcv

    安装MMCV 创建虚拟环境gupao 并激活 nvcc V 查看cuda版本 打开当前项目文件主页查看环境配置Prerequisites MMPretrain 1 0 1 documentation 4 安装合适的torch版本 原来的版本
  • 【数据分析】Python:处理缺失值的常见方法

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