【学习心得】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)

相关推荐

  1. 学习心得Pandas处理缺失思路

    2024-04-21 03:24:05       34 阅读
  2. 学习心得Pandas处理异常思路

    2024-04-21 03:24:05       34 阅读
  3. 数据分析-GroupBy排序和缺失处理

    2024-04-21 03:24:05       39 阅读
  4. sklearn缺失处理:SimpleImputer模块 补全缺失

    2024-04-21 03:24:05       53 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-21 03:24:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-21 03:24:05       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-21 03:24:05       82 阅读
  4. Python语言-面向对象

    2024-04-21 03:24:05       91 阅读

热门阅读

  1. 正则表达式笔记

    2024-04-21 03:24:05       33 阅读
  2. 【代码随想录刷题记录】LeetCode704二分查找

    2024-04-21 03:24:05       34 阅读
  3. 【备忘录】openssl记录

    2024-04-21 03:24:05       38 阅读
  4. openssl3.2 - exp - 用base64后的字符串作为配置项的值

    2024-04-21 03:24:05       31 阅读
  5. 记一次etcd数据恢复

    2024-04-21 03:24:05       31 阅读
  6. Linux 磁盘分区详解以及知识点分解

    2024-04-21 03:24:05       39 阅读
  7. SpringIOC容器Bean对象的实例化模拟

    2024-04-21 03:24:05       41 阅读
  8. daemonset会部署到主节点吗

    2024-04-21 03:24:05       31 阅读
  9. LeetCode 665. 非递减数列

    2024-04-21 03:24:05       36 阅读
  10. Linux线程调度

    2024-04-21 03:24:05       38 阅读