Python数据分析:缺失值检测与处理

简介: Python数据分析:缺失值检测与处理

检测缺失值


我们先创建一个带有缺失值的数据框(DataFrame)。

import pandas as pd
df = pd.DataFrame(
    {'A': [None, 2, None, 4],
     'B': [10, None, None, 40], 
     'C': [100, 200, None, 400],
     'D': [None, 2000, 3000, None]})
df
复制代码


image.png

数值类缺失值在 Pandas 中被显示为 NaN (Not A Number)。下面看看如何判断哪些列或者哪些行有缺失值。


1.info()

image.png

info() 返回的结果中,我们只需要观察每一列对应的 Non-Null Count 的数量是否等于 RangeIndex(索引范围) 即可。


2.isnull()

isnull() 返回一个与原 DataFrame 大小(列数,行数)相同的数据框,行列对应的数据代表着该位置是否为缺失值。

df.isnull()
复制代码

image.png

使用 sum() 来检测每列中的缺失值的数量。

df.isnull().sum()
复制代码

image.png

通过 .TDataFrame 转置,获取检测每行中缺失值的数量。

df.isnull().T.sum()
复制代码

image.png


缺失值处理


删除缺失值

如果出现缺失值的行/列重要性不大的话,可以直接使用 dropna() 删除带有缺失值的行/列。

df.dropna(axis=0,
          how='any',
          thresh=None,
          subset=None,
          inplace=False)
复制代码


参数含义

  • axis:控制行列的参数,0 行,1 列。
  • how:any,如果有 NaN,删除该行或列;all,如果所有值都是 NaN,删除该行或列。
  • thresh:指定 NaN 的数量,当 NaN 数量达到才删除。
  • subset:要考虑的数据范围,如:删除缺失行,就用subset指定参考的列,默认是所有列。
  • inplace:是否修改原数据,True直接修改原数据,返回 None,False则返回处理后的数据框。


指定 axis = 1,如果列中有缺失值,则删除该列。

df.dropna(axis=1, how='any')
复制代码

image.png

由于每列都有缺失值,所以只剩索引。

指定 axis = 0(默认),如果行中有缺失值,则删除该行。

df.dropna(axis=0, how='any')
复制代码

image.png


以 ABC 列为参照,删除这三列都是缺失值的行。

df.dropna(axis=0, subset=['A', 'B', 'C'], how='all')
复制代码

image.png


保留至少有3个非NaN值的行。

df.dropna(axis=0, thresh=3)
复制代码

image.png


填补缺失值

另一种常见的缺失值处理方式就是使用 fillna() 填补缺失值。

df.fillna(value=None,
          method=None,
          axis=0,
          inplace=False,
          limit=None)
复制代码


1. 直接指定填充值

df.fillna(666)
复制代码

image.png


2.用缺失值前/后的值填充

按前一个值填充

method 值为 ffillpad时,按前一个值进行填充。

axis = 0,用缺失值同一列的上一个值填充,如果缺失值在第一行则不填充。

axis = 1,用缺失值同一行的上一个值填充,如果缺失值在第一列则不填充。

df.fillna(axis=0, method='pad')
复制代码

image.png


按后一个值填充

method 值为 backfillbfill时,按后一个值进行填充。

axis = 0,用缺失值同一列的下一个值填充,如果缺失值在最后一行则不填充。

axis = 1,用缺失值同一行的下一个值填充,如果缺失值在最后一列则不填充。

df.fillna(axis=0, method='bfill')
复制代码

image.png


指定相应的方法来填充

df.fillna(df.mean())
复制代码

image.png


limit限制填充次数

在ABCD列上,每列只填充第一个空值。

df.fillna(value=666, axis=1, limit=1)
复制代码

image.png



相关文章
|
3天前
|
数据挖掘 计算机视觉 Python
Python数据分析13
Pillow 是 PIL(Python Imaging Library)的升级版本,适应 Python 3 的更新而诞生,带来了诸多新特性。它采用模块化结构,主要包括:图像功能模块(Image)、图像滤波功能模块(ImageFilter)、图像增强功能模块(ImageEnhance)和图像绘画功能模块(ImageDraw)。Pillow 支持从多种图像格式读取数据,进行处理,并能输出为常见格式,其官网提供了丰富的应用示例供学习参考。
16 4
|
1天前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python进行数据分析的入门指南
【9月更文挑战第33天】本文旨在为初学者提供一个关于使用Python进行数据分析的全面概述。我们将从基本的安装和设置开始,逐步介绍数据处理、数据可视化以及机器学习的基本概念和应用。文章将通过实际代码示例来展示如何使用Python及其相关库来解决常见的数据分析问题。
|
4天前
|
数据挖掘 Serverless 计算机视觉
Python数据分析 11
SciPy是一款专为数学、科学及工程应用设计的开源软件,它基于NumPy的n维数组构建,提供了丰富的数值例程,包括积分、优化、线性代数等,适用于各种操作系统,安装简易且免费。它还包含了如快速傅里叶变换、信号处理、图像处理、特殊函数计算等功能,满足了科学计算与工程需求。相较于NumPy的一般数组,SciPy提供了真正的矩阵及其相关运算支持。
24 7
|
4天前
|
自然语言处理 搜索推荐 数据挖掘
Python 数据分析10
除了常用的Python数据挖掘建模库外,还有许多其他库也非常实用,例如 jieba、SciPy、OpenCV 和 Pillow 等。其中,jieba 是一个广泛使用的中文分词库,支持多种编程语言,包括 Python、R 和 C++,并且提供了三种分词模式:精确模式、全模式和搜索引擎模式。此外,jieba 还具备词性标注、添加自定义词典及关键词提取等功能,在 GitHub 社区中有较高讨论度,并拥有丰富的实例资源。
17 5
|
1天前
|
SQL 数据采集 数据可视化
深入 Python 数据分析:高级技术与实战应用
本文系统地介绍了Python在高级数据分析中的应用,涵盖数据读取、预处理、探索及可视化等关键环节,并详细展示了聚类分析、PCA、时间序列分析等高级技术。通过实际案例,帮助读者掌握解决复杂问题的方法,提升数据分析技能。使用pandas、matplotlib、seaborn及sklearn等库,提供了丰富的代码示例,便于实践操作。
101 64
|
3天前
|
算法 数据挖掘 计算机视觉
Python数据分析12
OpenCV是由英特尔公司资助的开源计算机视觉库,集成了丰富的图像处理与计算机视觉算法,拥有超过500个函数,支持多种编程语言与操作系统。该库采用模块化设计,主要包括核心功能、图像处理、2D特征及GUI四个模块,广泛应用于产品检测、医学成像等多个领域。
11 1
|
4天前
|
机器学习/深度学习 并行计算 数据挖掘
Python数据分析8
飞桨(PaddlePaddle)是百度于2016年开源的一款学习框架,它以易用性、高效性、灵活性及可扩展性为特点,提供了涵盖核心深度学习框架、模型库、开发套件等在内的全面功能,并且支持大规模模型训练与多平台部署。此外,它不断优化性能,增强对各类硬件的支持,已在制造业、农业等多个领域广泛应用。
12 2
|
Python
python检测网络延迟
#!/usr/bin/env python # coding: utf-8 # coding: cp950 ''' Create Date: 2012-11-06 Version: 1.
2361 0
|
1天前
|
机器学习/深度学习 人工智能 数据可视化
Python比较适合哪些场景的编程?
Python比较适合哪些场景的编程?
14 7
|
2天前
|
存储 数据处理 开发者
深入浅出:Python编程基础与实战技巧
【9月更文挑战第32天】本文将引导读者从零开始,掌握Python编程语言的核心概念,并通过实际代码示例深入理解。我们将逐步探索变量、数据结构、控制流、函数、类和异常处理等基本知识,并结合实用案例,如数据处理、文件操作和网络请求,提升编程技能。无论您是初学者还是有一定经验的开发者,这篇文章都能帮助您巩固基础,拓展视野。
下一篇
无影云桌面