python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > pandas数据缺失值处理

pandas中数据缺失值的检测,统计与处理教学

作者:一位代码

数据缺失指的是数据中的某个或某些特征不完整,即由于各种原因导致数据记录中某些列的值空缺,本文整理了pandas 中常见的数据缺失值的检测、统计与处理方法,希望对大家有所帮助

前言

数据缺失:指的是数据中的某个或某些特征不完整,即由于各种原因导致数据记录中某些列的值空缺。

不同的数据存储或环境对于缺失值的表现结果不同,例如,数据库中为 Null,python 返回 None,pandas 或 Numpy 则是 NaN

缺失值也不同于空字符串,空字符串是有实体的,为字符串类型;而缺失值是没有实体的,没有数据类型。

pandas 中常见的数据缺失值的检测、统计与处理方法,如下。

一、缺失值的检测与统计

定量:了解数据中那些字段有缺失,缺失比例如何。

pandas 提供识别缺失值的方法 isnull、识别非缺失值的方法 notnull ,返回值为布尔值(False或True)。以下面读取数据的结果为示例:

import pandas as pd

df =pd.read_excel('sass.xlsx') # 读取数据
print(df)

缺失值的检测与统计

查看每列是否有缺失值

df.isnull.any():True 表示有缺失,False 表示没有缺失。

print('每列是否存在缺失值:\n', df.isnull().any()) # True表示有缺失,False表示无缺失

查看每列是否有缺失值

显示数据缺失情况、位置

df.isnull():True 表示有缺失,False 表示没有缺失。

print('数据缺失值查看:\n', df.isnull())  # True表示缺失,False表示未缺失

显示数据缺失情况、位置

统计每列缺失值个数

sum() 函数结合 isnull、notnull,可查看数据中缺失值的分布以及数据中一共有多少个缺失值。

print('每列数据缺失的个数:\n', df.isnull().sum())

统计每列缺失值个数

注:notnull 用法一样,只是代表意思相反,表示未缺失值情况。

二、缺失值的处理

直接删除缺失值(删除法)

这种方法简单明了,直接删除带有缺失值的行记录(整行删除)或者列字段(整列删除),但是这种方法会消减数据特征,在很多情况下是不科学的,需要根据具体情况来考虑是否删除。

pandas 提供了 dropna 方法来删除缺失值,语法:

DataFrame.dropna(self,axis=0,how='any',thresh=None,subset=None,inplace=False)
参数释义
axis接收0或1,表示轴向,0表示行,1表示列。默认为0
how接收特定string,表示删除形式。取值为“any”,表示只要有缺失值就执行删除操作,取值为“all”,表示当且仅当全部为缺失值时才执行删除操作。默认为“any”
subset接收array,表示根据去重的行/列条件。默认为None,所有行/列
inplace接收布尔值,代表操作是否对原数据生效,默认为False

以原始数据(df1)为例:

直接删除缺失值(删除法)

实例1:删除存在缺失值(NaN)的所有列

df2 =df1.dropna(axis=1)
print('删除存在缺失值的所有列后:\n', df2)

直接删除缺失值(删除法)

实例2:删除特定字段存在缺失值(NaN)的行。

如:删除'Protein'或 'CHO'字段存在缺失值(NaN)的行。

df3 = df1.dropna(subset=['Protein', 'CHO'])
print('删除特定字段为空的行:\n', df3)

直接删除缺失值(删除法)

替换补齐缺失值

相对于直接删除法而言,补齐是更加常用的缺失值处理方法。

如果缺失值所在特征(列)为数值型,通常利用均值、中位数、众数等描述其集中趋势的统计量来替换补齐缺失值;

如果缺失值所在特征(列)为类别型,选择使用类别众数来替换补齐。

当然根据实际情况,可选择随机法、特殊值法、模型法等来替换补齐。

Pandas 提供了缺失值替换的方法 fillna,语法:

DataFrame.fillna(value=None,method=None,axis=1,inplace=False,limit=None)
参数释义
value接收dict、DataFrame等类型数据,表示用来替换缺失值的值。无默认值
method接收特定string:(1)取值为“backfill”或“bfill”,表示使用下一个非缺失值来填补缺失值。(2)取值为“pad”或“ffill”,表示使用上一个非缺失值来填补缺失值。默认为None
axis接收0或1,表示轴向。默认为1
inplace接收布尔值,代表操作是否对原数据生效,默认为False
limit接收int,表示填补缺失值个数上限,超过则不进行填补。默认为None

以上面数据(df1)为例,将所有缺失值(NaN)填充为0:

df4 = df1.fillna(value=0)
print('将所有缺失值填充为0:\n', df4)

替换补齐缺失值

注:根据实际需要,为缺失数据填充合理的值,方便后面数据的分析与建模,这里全部填充为0,只是作为一个方法举例。

以上就是pandas中数据缺失值的检测,统计与处理教学的详细内容,更多关于pandas数据缺失值处理的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文