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

本文详细介绍了如何使用Pandas库在Python中处理缺失值,包括识别缺失值的方法(如isnull和notnull),分析缺失值的重要性,以及删除(dropna)和填充(fillna)缺失值的不同策略。
摘要由CSDN通过智能技术生成

        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)
  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值