【学习心得】Pandas处理缺失值的思路

        Pandas处理缺失值分三步:识别缺失值、分析缺失值、处理缺失值(删除缺失值、填充缺失值)

一、识别缺失值

        在使用Pandas处理缺失值的时候,第一步是准确识别数据集中有哪些行和列存在缺失值,Pandas提供了isnull和notnull方法来帮助我们识别缺失值。

(1)检查特定值

        Pandas使用NaN(Not a Number)表示缺失值。对于浮点数类型,NaN遵循IEEE 754标准,而对于其他类型(如整数、字符串等),Pandas会将其转换为float类型并标记为NaN

(2)isnullnotnull()方法

  • isnull()返回一个布尔型DataFrame或Series,其中True表示对应位置存在缺失值,False表示对应位置数据完整。
  • notnull()isnull()相反,返回True表示数据完整,False表示存在缺失值。
missing_mask = df.isnull()
print(missing_mask)

missing_mask = df.notnull()
print(missing_mask)

(3)配合any()检查缺失的行和列

        上面介绍了使用isnull()或者notnull()来检测元素有没有缺失数据,但我们大部分时候不关心具体哪个元素缺失。我们只关心哪一行或者那一列是否存在缺失数据。这时候可以配合any()方法来检测,isnull().any(axis=0/1),检查行列中是否存在缺失数据。

# axis=0,对行进行聚合,行消失了,留下了列,所以最终的效果是检查每一列是否存在缺失值
df.isnull().any(axis=0)

# axis=1,对列进行聚合,列消失了,留下了行,所以最终效果是对每一行判断是否有缺失数据
df.isnull().any(axis=1)

二、分析缺失值

        在找到缺失值所在的行和列后,和处理缺失值之前,我们得分析缺失值对我们是否重要?缺的多不多?缺失的分布是怎样的?为什么缺?等等问题,能够帮助我们后续选择合适的处理缺失值的方法。

        简单介绍分析的思路和可以采取的方法,可以使用sum()方法计算缺失值的数量,使用info()方法得知哪列有缺失值,或者使用describe()方法查看包含缺失值的统计摘要。


 三、处理缺失值

(1)删除缺失值

  • 缺的数据太多了,比如缺了50%以上
  • 缺的数据对我们要做的事情没有任何帮助,相当于是无用数据,可以删掉
# 默认删除行,而且是any逻辑,只要有一个元素是空的,这一行就整个删除
df.dropna()

# 可以通过axis=1改成删除含有缺失值的列数据
df.dropna(axis=1)

# inplace参数,表示原地操作,这里是指直接改变原数组
df.dropna(inplace=True)

# how="all"只有当这一行全部都是空的时候才删除
df.dropna(how="all")  

# how参数配合subset参数,可以指定范围内全是空才删除
df.dropna(how="all", subset=['语文', '数学', '英语'])

(2)填充缺失值

        根据数据的性质和问题的需求,可以选择不同的填充策略。填充原则:尽量合理,贴近真实情况。

  • 使用常数填充:例如,对于某些分类变量,可以使用最常见的类别或特定占位符来填充缺失值。
  • 使用均值、中位数或众数填充:对于数值变量,可以使用列的均值、中位数或众数来填充缺失值。
  • 使用插值方法填充:对于时间序列数据,可以使用插值方法(如线性插值、多项式插值等)来填充缺失值。
  • 使用模型预测填充:可以使用机器学习模型来预测缺失值。
# 1、最简单的方式使用指定的值去填充
df.fillna(value=108)  # 全部缺失的值都用固定值来填充

# 2、使用平均数等等统计函数来填充
df_mean = df.mean()
df_mean

# 3、series也可以使用fillna来填充
stu1 = df.iloc[0]
stu1

# 4、用周围上下左右的数据填充
df.fillna(method='ffill', axis=0)
df.fillna(method='ffill', axis=1)
df.fillna(method='bfill', axis=0)
df.fillna(method='bfill', axis=1)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

5-内核开发-/proc File System 学习

5-内核开发-/proc File System 学习 课程简介: Linux内核开发入门是一门旨在帮助学习者从最基本的知识开始学习Linux内核开发的入门课程。该课程旨在为对Linux内核开发感兴趣的初学者提供一个扎实的基础,让他们能够理解和参与到Linux内核的开发过程中。…

Nacos采坑:非集群Nacos不要使用同一个MySQL数据库

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 Nacos 致力于帮助您…

第27章 筹集资金

< 回到目录 第六部分 流程 在各关键职能安排好了关键人员之后&#xff0c;公司有效运作&#xff0c;数据系统正常运行&#xff0c;经理和团队成员之间的双向信息交流顺畅。现在&#xff0c;剩下的就是你与外部世界的交流&#xff0c;包括与投资者、招聘者和客户的互动。这些…

银行买的黄金怎么卖出去?了解黄金交易的步骤和注意事项

黄金一直以来都是备受投资者关注的贵金属之一。银行提供了购买黄金的机会&#xff0c;但投资者也需要了解如何卖出银行买的黄金。 选择适合的购买方式 投资者可以通过多种途径购买黄金&#xff0c;其中包括银行提供的黄金交易服务。银行买黄金的方式可以是通过黄金交易账户、黄…

力扣HOT100 - 114. 二叉树展开为链表

解题思路&#xff1a; class Solution {List<TreeNode> list new ArrayList<>();public void flatten(TreeNode root) {recur(root);for (int i 1; i < list.size(); i) {TreeNode pre list.get(i - 1);TreeNode cur list.get(i);pre.left null;pre.right…

SpringBoot学习之Kafka下载安装和启动【Mac版本】(三十三)

一、配置Java环境变量 在启动Kafka之前,你需要先正确配置好你的Java环境变量。可以在终端输入java -version检查java环境变量是否配置正确,在Mac上如何配置java环境变量,请读者自行网上搜索操作之,此处不赘叙。 二、下载安装Kafka 1、下载Kafka:Apache Kafka,这两个版本…

python简易小时钟

import time import turtledef getTime():tt time.localtime() # 结构化的时间ss time.strftime(%Y年%m月%d日 %H:%M:%S, tt)return sspen turtle.Turtle()pen.backward(100) pen.speed(0)while True:time.sleep(1)times getTime()pen.clear()pen.write(times, font("…

中颖51芯片学习10. Touch Key触摸按键功能

中颖51芯片学习10. Touch Key触摸按键功能 一、SH79F9476 资源介绍1. 特性2. 系统框图&#xff1a;3.准备环境 二、准备工具三、开发步骤1. 新建项目流程&#xff08;1&#xff09;新建工程&#xff08;2&#xff09;选择芯片和封装&#xff08;3&#xff09;触摸配置按键&…

Tomcat架构设计精髓分析-Connector高内聚低耦合设计

优秀的模块化设计通常都会采用高内聚、低耦合 高内聚是指相关度比较高的功能要尽可能集中&#xff0c;不要分散。低耦合是指两个相关的模块要尽可能减少依赖的部分和降低依赖的程序&#xff0c;不要让两个模块产中强依赖。 Tomca连接器需要实现的功能: 监听网络端口 接受网络…

MATLAB将多张小图整合到一张大图形成模板图

MATLAB将多张小图整合到一张大图形成模板图 代码如下: clc;close all;clear all;warning off;%清除变量 rand(seed, 100); randn(seed, 100); format long g;foldername字符模板; [datacell,filenamecell,filenameAllcell]readfun_1n(foldername); K2length(filenamecell);% …

用友 GRP-U8 fastjson远程代码执行漏洞复现(XVE-2024-8863)

0x01 产品简介 用友GRP-U8R10行政事业内控管理软件是用友公司专注于国家电子政务事业,基于云计算技术所推出的新一代产品,是我国行政事业财务领域最专业的政府财务管理软件。 0x02 漏洞概述 用友 GRP-U8 R10系列版本 VerifyToken 接口存在低版本fastjson反序列化漏洞,未经…

ESP32环境下基于SD卡与FTP实现温湿度数据采集与存储

本篇文章将介绍如何利用ESP32开发板结合SD卡与FTP服务器功能&#xff0c;实现温湿度数据的实时采集、存储与远程访问。项目代码基于Arduino IDE平台编写&#xff0c;主要依赖于以下库&#xff1a; SPIDHTWiFitime.hESP-FTP-Server-LibSDSPIFFSFS 1. 硬件连接与配置 1.1 所需…

Python | Leetcode Python题解之第46题全排列

题目&#xff1a; 题解&#xff1a; class Solution:def permute(self, nums):""":type nums: List[int]:rtype: List[List[int]]"""def backtrack(first 0):# 所有数都填完了if first n: res.append(nums[:])for i in range(first, n):# 动…

漫谈AI 时代的信息模型

模型化- 数字化转型的重要基石 在各行各业推行数字化转型过程中&#xff0c;构建信息化模型十分重要&#xff0c;它是数字化转型的基石。事实上&#xff0c;数字化转型的核心是“万物皆模型”&#xff0c;在工业领域&#xff0c;以德国为主导的工业4.0 发展进程中&#xff0c;…

超越5G:迈向6G网络传感前沿的革命性飞跃

6G推动的传感技术发展有望将人类感官拓展到目前的极限。从精确测绘到活动识别&#xff0c;联网传感揭示了看不见的事物&#xff0c;使我们能够理解和预测以前未知的周围环境。高精度定位、增强人类感官和手势/活动识别的无缝集成预示着未来机器将以前所未有的自主性运行... 在飞…

安全AI未来 | C3安全大会 · 2024,数据驱动 AI原生

数字为时代变革注入动力&#xff0c;AI为重塑社会文明带来原力。数智浪潮中&#xff0c;我们见证着时代跃迁的巨变&#xff0c;面临着适变、应变、驭变的挑战。 数字驱动、AI原生。数字的流动不仅承载着信息&#xff0c;更将激活未来的无限价值&#xff1b;AI&#xff0c;不…

为什么要写技术方案?

技术方案是为研究解决各类技术问题&#xff0c;有针对性&#xff0c;系统性的提出的方法、应对措施及相关对策。技术方案设计是一个技术开发者必备的能力&#xff0c;特别是对于高级、资深、架构师等角色。技术方案设计不仅能够帮助我们明确需求&#xff0c;规划架构&#xff0…

【数据库】三、数据库SQL语言命令(基础从入门到入土)

【全文两万多字&#xff0c;涵盖大部分常见情况&#xff0c;建议点赞收藏】 目录 文章目录 目录安装SQL语言1.使用2.DATABASE查看所有库新建数据库修改数据库删除数据库连接数据库 3.TABLE创建表查看库所有表删除表查看表信息重命名表修改表字段&#xff08;列&#xff09;表中…

自动批量将阿里云盘文件发布成WordPress文章脚本源码(以RiPro主题为例含付费信息下载地址SEO等自动设置)源码

背景 很多资源下载站&#xff0c;付费资源下载站&#xff0c;付费内容查看等都可以用WordPress站点发布内容&#xff0c;这些站点一般会基于一个主题&#xff0c;付费信息作为文章附属的信息发布&#xff0c;底层存储在WP表里&#xff0c;比如日主题&#xff0c;子比主题等。 …

js的算法-插入排序(直接插入排序)

插入排序 插入排序是一种简单直接的排序方法&#xff0c;其基本思想是每次将一个待排序的记录按其关键字大小插入到前面已经排好序的子序列&#xff0c;直到全部记录插入完成。由插入排序的思想可以引申出三个重要的排序算法&#xff1a; 直接插入排序、折半插入排序和希尔排序…