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

news/2024/9/23 5:44:07/

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

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

1.缺失数据的检测

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

python">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())

输出结果:

python">       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() 方法来删除缺失值。根据需要,可以删除整行或整列。

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

删除包含缺失值的行:

python">     A     B      C
0  1.0  10.0  100.0
4  5.0  50.0  500.0

删除包含缺失值的列:

python">     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)

输出结果:

python">     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)

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

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

输出结果:

python">     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)

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

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

输出结果:

python">     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 线性插值

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

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

输出结果:

python">     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 时间插值

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

python"># 创建一个包含时间序列数据的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)

输出结果:

python">            数值
日期             
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(样条插值)等。可以根据数据特性选择适合的插值方法。

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

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

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


http://www.ppmy.cn/news/1529176.html

相关文章

SpringBoot - 基于 Java的超市进销存系统

专业团队,咨询就送开题报告,欢迎大家私信,留言,联系方式在文章底部 摘 要 随着信息化时代的到来,管理系统都趋向于智能化、系统化,超市进销存系统也不例外,但目前国内仍都使用人工管理&#xf…

深度学习对抗海洋赤潮危机!浙大GIS实验室提出ChloroFormer模型,可提前预警海洋藻类爆发

2014 年 8 月,美国俄亥俄州托莱多市超 50 万名居民突然收到市政府的一则紧急通知——不得擅自饮用自来水! 水是人类生存的基本供给,此通告关系重大,发出后也引起了不小的恐慌。究其原因,其实是美国伊利湖爆发了大规模…

浅显易懂的Git教程

Git概述 SVN与Git的对比 SVN(Subversion) 类型:集中式版本控制系统 工作流程: 从中央服务器下载最新版本到本地。在本地进行开发。提交更改回中央服务器。 优点: 简单易用,适合小型团队。版本历史清…

无人机之4G模块的主要功能和优势

一、增强图传 在无人机飞行过程中,传统的图传方式可能会受到信号遮挡或干扰的影响,导致图像传输不稳定甚至中断。而4G模块通过结合4G网络技术,能够在原有图传技术的基础上提供增强的图传功能。当传统图传信号不佳时,无人机可以自动…

计算机毕业设计之:基于微信小程序的诗词智能学习系统(源码+文档+解答)

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

Linux学习之路 -- 线程 -- 互斥

目录 1、概念引入 2、互斥锁 1、pthread_mutex_init && pthread_ mutex_destory 2、pthread_mutex_lock && pthread_mutex_unlock 3、互斥锁原理的简单介绍 1、概念引入 为了介绍线程的同步与互斥,我们以抢票逻辑引入相关的概念。 示例代码…

YOLOv10改进,YOLOv10替换主干网络为PP-HGNetV2(百度飞桨视觉团队自研,独家手把手教程,助力涨点)

摘要 PP-HGNetV2(High Performance GPU Network V2) 是百度飞桨视觉团队自研的 PP-HGNet 的下一代版本,其在 PP-HGNet 的基础上,做了进一步优化和改进,最终在 NVIDIA GPU 设备上,将 “Accuracy-Latency Balance” 做到了极致,精度大幅超过了其他同样推理速度的模型。其在…

Windows上,使用远程桌面连接Ubuntu

要在 Ubuntu 上设置公网 IP 并通过 Windows 远程桌面连接到 Ubuntu,你需要完成以下步骤: 设置 Ubuntu 公网 IP: 确保你的 Ubuntu 服务器已经配置了一个公网 IP 地址。 你可以通过云服务提供商(如 AWS、Azure、Google Cloud&#…