Python Pandas数据清洗之缺失数据处理

大家好,在数据分析和处理过程中,缺失数据是常见且不可避免的现象。无论是在数据收集、传输或存储的过程中,数据集可能会出现部分丢失。缺失数据的存在不仅会影响数据的完整性,还可能对后续的数据分析和建模造成不利影响。为了保证数据质量,合理处理缺失数据至关重要。

Python的Pandas库提供了强大的工具,能够高效处理数据中的缺失值,特别是通过插值和填充技术来弥补数据的缺失。本文将介绍如何使用Pandas处理数据中的缺失值,着重探讨插值和填充的技巧。通过这些方法,可以保证数据集的完整性,并提高分析结果的准确性。

1.缺失数据的检测

在Pandas中,缺失数据通常用 NaN(Not a Number)表示。Pandas提供了多种方法来检测数据中的缺失值。常见的检测方法包括 isna()isnull(),这两个方法可以检测数据中的 NaN 值,并返回一个布尔值数据框。

import pandas as pd
import numpy as np# 创建一个包含缺失数据的DataFrame
data = {'A': [1, 2, np.nan, 4, 5],'B': [10, np.nan, np.nan, 40, 50],'C': [100, 200, 300, np.nan, 500]
}df = pd.DataFrame(data)# 检测缺失值
print(df.isna())

输出结果:

       A      B      C
0  False  False  False
1  False   True  False
2   True   True  False
3  False  False   True
4  False  False  False

isna() 返回了一个布尔值数据框,标识出哪些位置有缺失值。True 表示对应位置的值为 NaNFalse 表示该位置的数据是完整的。

2.删除缺失数据

在某些情况下,删除包含缺失值的行或列是处理缺失数据的一个简单有效的方法。Pandas提供了 dropna() 方法来删除缺失值。根据需要,可以删除整行或整列。

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

删除包含缺失值的行:

     A     B      C
0  1.0  10.0  100.0
4  5.0  50.0  500.0

删除包含缺失值的列:

     A
0  1.0
1  2.0
2  NaN
3  4.0
4  5.0

dropna()axis 参数控制删除行还是列,axis=0 表示删除行,axis=1 表示删除列。

尽管删除缺失数据是一种简单的方法,但在某些情况下,删除数据可能导致信息丢失过多。因此,更合理的选择是使用插值和填充技术来补全缺失值。

3.使用填充技术处理缺失数据

Pandas提供了 fillna() 方法来填充缺失数据,常见的填充策略包括使用固定值填充、前向填充(ffill)和后向填充(bfill)。

3.1 使用固定值填充

# 使用固定值0填充缺失值
df_fillna_0 = df.fillna(0)
print(df_fillna_0)

输出结果:

     A     B      C
0  1.0  10.0  100.0
1  2.0   0.0  200.0
2  0.0   0.0  300.0
3  4.0  40.0    0.0
4  5.0  50.0  500.0

在这个示例中,fillna(0) 将所有的 NaN 值替换为0。

3.2 前向填充(ffill)

前向填充是指用前一个有效数据填充缺失值,常用于时间序列数据。

# 使用前向填充
df_ffill = df.fillna(method='ffill')
print(df_ffill)

输出结果:

     A     B      C
0  1.0  10.0  100.0
1  2.0  10.0  200.0
2  2.0  10.0  300.0
3  4.0  40.0  300.0
4  5.0  50.0  500.0

3.3 后向填充(bfill)

后向填充则是用后一个有效数据填充缺失值。

# 使用后向填充
df_bfill = df.fillna(method='bfill')
print(df_bfill)

输出结果:

     A     B      C
0  1.0  10.0  100.0
1  2.0  40.0  200.0
2  4.0  40.0  300.0
3  4.0  40.0  500.0
4  5.0  50.0  500.0

前向填充和后向填充对于时间序列数据尤其有效,可以根据实际业务逻辑选择合适的填充方向。

4.使用插值技术处理缺失数据

插值是一种根据已有数据来估计缺失值的技术。Pandas提供了 interpolate() 方法,可以根据多种插值方式填充缺失值。常见的插值方法包括线性插值、时间插值等。

4.1 线性插值

线性插值是最常用的插值方法,它通过现有的两个数据点之间的线性关系来填补中间的缺失值。

# 使用线性插值填充缺失值
df_interpolate = df.interpolate()
print(df_interpolate)

输出结果:

     A     B      C
0  1.0  10.0  100.0
1  2.0  25.0  200.0
2  3.0  32.5  300.0
3  4.0  40.0  400.0
4  5.0  50.0  500.0

在这个示例中,interpolate() 方法使用线性插值填补了 NaN 值,使得数据更加平滑和连续。

4.2 时间插值

时间插值对于处理时间序列数据非常有用,它基于时间轴对数据进行插值。

# 创建一个包含时间序列数据的DataFrame
time_data = {'日期': pd.date_range('2024-01-01', periods=5),'数值': [np.nan, 2, np.nan, 8, 10]
}df_time = pd.DataFrame(time_data)
df_time.set_index('日期', inplace=True)# 使用时间插值填充缺失值
df_time_interpolated = df_time.interpolate(method='time')
print(df_time_interpolated)

输出结果:

            数值
日期             
2024-01-01  2.0
2024-01-02  2.0
2024-01-03  5.0
2024-01-04  8.0
2024-01-05  10.0

在时间序列数据中,使用时间插值可以根据日期自动推算缺失值,填补后的数据保持了时间上的连续性。

4.3 多种插值方法

Pandas的 interpolate() 方法支持多种插值方法,包括 polynomial(多项式插值)、spline(样条插值)等。可以根据数据特性选择适合的插值方法。

# 使用多项式插值
df_poly_interpolate = df.interpolate(method='polynomial', order=2)
print(df_poly_interpolate)

在这个示例中,使用二次多项式插值填补了缺失值,多项式插值适合处理有曲线趋势的数据。

在数据分析中,缺失数据的处理是至关重要的一步,直接影响到分析结果的准确性。Python的Pandas库提供了多种有效的工具和方法来处理缺失数据,尤其是通过插值和填充技术。通过合理选择这些数据清洗方法,可以有效地弥补数据集中存在的空白,保证数据的连续性和完整性。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

[WMCTF2020]Make PHP Great Again 2.01

又是php代码审计,开始吧. 这不用审吧,啊喂. 意思就是我们要利用require_once()函数和传入的file的value去读取flag的内容.,貌似呢require_once()已经被用过一次了,直接读取还不行,看一下下面的知识点. require_once() require…

WebLogic 漏洞复现

1、后台弱⼝令GetShell 默认账号密码:weblogic/Oracle123 weblogic常⽤弱⼝令:https://cirt.net/passwords?criteriaweblogic 这⾥注意, 单个账号错误密码5次之后就会⾃动锁定。 http://47.121.212.195:7001/console 2、登录后台后&#…

恒生科指八连涨,汽车股强势

9月20日电 周五,港股三大股指集体收涨。恒生指数涨1.36%报18258.57点,连续第六个交易日上涨;恒生科技指数涨1.43%报3703.84点,连续第八个交易日上涨,创逾两个月来新高;恒生中国企业指数涨1.21%报6381.5点&a…

项目扩展五:交互式:command-line interface版本的实现

项目扩展五:command-line interface版本的实现 一、CLI交互的设计1.为何要设计这个CLI交互2.具体设计1.启动服务2.选择信道3.选择虚拟机4.正式业务注意:1.消费者与生产者跟信道的关系2.消息处理回调函数的问题3.消息确认的问题 5.其他功能1.打印功能2.查…

STM32精确控制步进电机

目的:学习使用STM32电机驱动器步进电机,进行电机运动精确控制。 测试环境: MCU主控芯片STM32F103RCT6 ;A4988步进电机驱动器模块;微型2相4线步进电机10mm丝杆滑台,金属丝杆安装有滑块。 10mm二相四线微型…

机器学习之非监督学习(二)异常检测(基于高斯概率密度)

机器学习之非监督学习(二)异常检测(基于高斯概率密度) 0. 文章传送1.案例引入2.高斯正态分布3.异常检测算法4.异常检测 vs 监督学习5.算法优化6.代码实现 0. 文章传送 机器学习之监督学习(一)线性回归、多…

C语言中数组和字符串的联系

一、C语言中,数组和字符串 1、C语言中,定义一个数组后,数组名保存的是这个数组的首地址。类似一个指向数组第一个元素的指针,但是这个指针不能重新指向。2、字符串在C语言中是通过字符数组来实现的,也就是说字符串还是…

【小沐学CAD】3ds Max常见操作汇总

文章目录 1、简介2、二次开发2.1 C 和 3ds Max C SDK2.2 NET 和 3ds Max .NET API2.3 3ds Max 中的 Python 脚本2.4 3ds Max 中的 MAXScript 脚本 3、快捷键3.1 3Dmax键快捷键命令——按字母排序3.2 3dmax快捷键命令——数字键3.3 3dmax功能键快捷键命令3.4 3Dmax常用快捷键——…

Elasticsearch 完整格式的 URL 进行分词,有什么好的解决方案吗?

1、问题描述 我想对完整格式的 url 进行分词,请问有什么好的解决方案吗? 比如:https://www.abc.com/any/path?param_1some&param-2other#title 看了官方的分词器,感觉没啥合适的? 预处理的话,又不知道该怎么处理…

Unity对象池的高级写法 (Plus优化版)

唐老师关于对物体分类的OOD的写法确实十分好,代码也耦合度也低,但是我有个简单的写法同样能实现一样的效果,所以我就充分发挥了一下主观能动性 相较于基本功能,这一版做出了如下改动 1.限制了对象池最大数量,多出来的…

C++11 可变的模板参数

前言 本期我们接着继续介绍C11的新特性,本期我们介绍的这个新特性是很多人都感觉抽象的语法!它就是可变的模板参数! 目录 前言 一、可变的模板参数 1.1可变的参数列表 1.2可变的参数包 1.3可变参数包的解析 • 递归展开解析 • 逗号…

微服务Docker相关指令

1、拉取容器到镜像仓库 docker pull xxx //拉取指令到 镜像仓库 例如 docker pull mysql 、docker pull nginx docker images //查看镜像仓库 2、删除资源 2.1、删除镜像仓库中的资源 docker rmi mysql:latest //删除方式一:格式 docker rmi 要…

【解密 Kotlin 扩展函数】扩展函数的创建(十六)

导读大纲 1.1 为第三方的类添加方法: 扩展函数 1.1 为第三方的类添加方法: 扩展函数 Kotlin 的主题之一是与现有代码的平滑集成 即使是纯 Kotlin 项目,也是构建在 Java 库之上的 如 JDK、Android 框架和其他第三方框架 而当你将 Kotlin 集成到 Java 项目中时 你还要处理尚未或不…

python爬虫:将知乎专栏文章转为pdf

欢迎关注本人的知乎主页~ 实现思路 用户输入专栏ID: 代码首先提示用户输入一个知乎专栏的ID,默认值为 c_1747690982282477569。输入的ID用于构建API请求的URL。 发送HTTP请求: 使用 requests.get() 向知乎API发送GET请求,获取指定…

【QGIS入门实战精品教程】6.1:QGIS根据属性条件查询数据(SQL表达式)

文章目录 一、字段过滤二、高级过滤(表达式)一、字段过滤 对于单个字段的查询,可以采用字段过滤,例如,从县区数据中,根据NAME字段,查找出县级市玉门市。操作为:右键县区→打开属性表: 点击左下角,选择name字段。 输入玉门市,回车,选择查找除的属性表记录,此时图斑…

【Linux】入门【更详细,带实操】

Linux全套讲解系列,参考视频-B站韩顺平,本文的讲解更为详细 目录 1、课程内容 2、应用领域 3、概述 4、 Linux和Unix 5、VMware15.5和CentOS7.6安装 6、网络连接三种方式 7、虚拟机克隆 8、虚拟机快照 9、虚拟机迁移删除 10、vmtools 11、目录…

set-ExecutionPolicy RemoteSigned 提示不是内部或外部命令,也不是可运行的程序或批处理文件

这个错误一般发生在使用命令提示符或者PowerShell窗口中找不到set-ExecutionPolicy RemoteSigned。如果你想在命令提示符或者PowerShell窗口运行set-ExecutionPolicy RemoteSigned,你需要搜索打开Window PowerShell ISE,并以管理员身份打开,输…

基于微信小程序的美食外卖管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏:Java精选实战项目…

Tomcat系列漏洞复现

CVE-2017-12615——Tomcat put⽅法任意⽂件写⼊漏洞 漏洞描述 当 Tomcat运⾏在Windows操作系统时,且启⽤了HTTP PUT请求⽅法(例如,将 readonly初始化参数由默认值设置为false),攻击者将有可能可通过精⼼构造的攻击请求…

身份安全风险不断上升:企业为何必须立即采取行动

在推动安全AI 模型的过程中,许多组织已转向差异隐私。但这种旨在保护用户数据的工具是否阻碍了创新? 开发人员面临一个艰难的选择:平衡数据隐私或优先考虑精确结果。差分隐私可以保护数据,但通常以牺牲准确性为代价——对于医疗保…