Python缺失值处理 您所在的位置:网站首页 python删除数据集中某个变量下中指定元素 Python缺失值处理

Python缺失值处理

2023-05-19 16:27| 来源: 网络整理| 查看: 265

缺失值的处理方法有很多。例如,剔除缺失值、简单的均值填充、缺失值多变量填补等方法。接下来使用具体的数据集,结合Python库中的相关函数,介绍如何处理数据中的缺失值。将会介绍如何使用Python发现数据中的缺失值,以及使用一些简单的方法对缺失值进行处理,例如:剔除、均值填充等缺失值处理方法。

## 输出高清图像 %config InlineBackend.figure_format = 'retina' %matplotlib inline ## 图像显示中文的问题 import matplotlib matplotlib.rcParams['axes.unicode_minus']=False import seaborn as sns sns.set(font= "Kaiti",style="ticks",font_scale=1.4) ## 导入本小节会使用到的包 import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import missingno as msno

发现数据中的缺失值

在对数据进行缺失值处理时,第一步要做的就是分析数据中是否存在缺失值,以及缺失值存在的形式。下面导入一个真实的数据集,介绍发现数据是否有缺失值的方法。针对导入的数据表,可以使用pd.isna()方法,判断每个位置是否为缺失值,例如使用pd.isna(oceandf).sum(),在判断数据oceandf中的每个元素是否为缺失值后,使用sum()方法,对每列求和,可以计算出每个变量缺失值的数量,相关输出如下所示:

## 读取用于演示的数据集 oceandf = pd.read_csv("data/chap2/热带大气海洋数据.csv") ## 判断每个变量中是否存在缺失值 pd.isna(oceandf).sum() Year 0 Latitude 0 Longitude 0 SeaSurfaceTemp 3 AirTemp 81 Humidity 93 UWind 0 VWind 0 dtype: int64

针对上面的输出可以发现,一共有三个变量带有缺失值,分别是:SeaSurfaceTemp变量有3个缺失值、AirTemp变量有81个缺失值、Humidity变量有93个缺失值。虽然知道了数据中缺失值的情况,但是缺失值在数据表中的分布情况,针对这种情况,可以使用msno.matrix()函数,可视化出缺失值在数据汇总的分布情况,例如使用下面的程序可获得如图2-1所示的图像。

## 使用可视化方法查看缺失值子在数据中的分布 msno.matrix(oceandf,figsize=(14, 7),width_ratios=(13, 2),color=(0.25, 0.25, 0.5)) plt.show()图1 缺失的分布可视化

图1可以分布两个部分,左边部分表示缺失值在数据中的分布,736表示数据表中的第736行数据,每个变量图像汇总,空白的部位表示该处存在缺失值,左侧的折线表示了每个变量缺失值的情况,8表示数据中一个有8个变量,5表示对应的样本只用5个变量是完整的,存在3个缺失值。可以发现使用该图像可以对数据表中缺失值的分布情况一目了然。

剔除带有缺失值的行或列

剔除带有缺失值的行或列是最简单的缺失值处理方法,通常情况下,如果数据中只用较少的样本带有缺失值,则可以删除带有缺失值的行。如果某列的数据带有大量的缺失值,进行缺失值填充可能会带来更多的负面影响,则可以直接删除缺失值所在的列。删除数据中带有缺失值的行或列,可以使用数据的dropna()方法,相关程序示例如下所示:

## 剔除带有缺失值的行 oceandf2 = oceandf.dropna(axis=0) oceandf2.info() Int64Index: 565 entries, 0 to 735 Data columns (total 8 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Year 565 non-null int64 1 Latitude 565 non-null int64 2 Longitude 565 non-null int64 3 SeaSurfaceTemp 565 non-null float64 4 AirTemp 565 non-null float64 5 Humidity 565 non-null float64 6 UWind 565 non-null float64 7 VWind 565 non-null float64 ## 剔除带有缺失值的列 oceandf3 = oceandf.dropna(axis=1) oceandf3.info() RangeIndex: 736 entries, 0 to 735 Data columns (total 5 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Year 736 non-null int64 1 Latitude 736 non-null int64 2 Longitude 736 non-null int64 3 UWind 736 non-null float64 4 VWind 736 non-null float64

对缺失值进行插补

针对缺失值的常用处理方法,就是使用其它数据进行缺失值插补。下面介绍如何使用缺失值的均值、前面的值等情况进行缺失值插补。在这之前首先使用散点图,可视化出剔除带有缺失值行后,AirTemp和Humidity变量的数据分布。程序如下所示:

## 可视化删除缺失值所在行后AirTemp和Humidity变量的数据分布散点图 plt.figure(figsize = (10,6)) plt.scatter(oceandf.AirTemp,oceandf.Humidity,c = "blue") plt.grid() plt.xlabel("AirTemp") plt.ylabel("Humidity") plt.title("剔除带有缺失值的行") plt.show()图2 剔除带有缺失值行的散点图

针对数据表数据,Panda库提供了数据表的fillna()方法,该方法可以通过指定参数method设置进行缺失值的填充方式,常用的方式有:method = "ffill",使用缺失值前面的值进行填充;method = "bfill",使用缺失值后面的值进行填充等。下面针对oceandf数据集分别使用这两种方式进行缺失值填充,并可视化出填充后缺失值所在的位置。首先使用method = "ffill"的方法,程序如下所示:

## 找到缺失值所在的位置 nanaindex = pd.isna(oceandf.AirTemp) | pd.isna(oceandf.Humidity) ## 对使用缺失值前面的值进行填充 oceandf4 = oceandf.fillna(axis = 0,method = "ffill") ## 可视化填充后的结果 plt.figure(figsize = (10,6)) plt.scatter(oceandf4.AirTemp[~nanaindex],oceandf4.Humidity[~nanaindex], c = "blue",marker = "o",label = "非缺失值") plt.scatter(oceandf4.AirTemp[nanaindex],oceandf4.Humidity[nanaindex], c = "red",marker = "s",label = "缺失值") plt.grid() plt.legend(loc = "upper right",fontsize = 12) plt.xlabel("AirTemp") plt.ylabel("Humidity") plt.title("使用缺失值前面的值填充") plt.show()

运行程序后可获得如图3所示的图像:在图像中,蓝色的圆点表示不带缺失值的数据,红色的矩形表示带有缺失值样本的数据。从图像中可以发现填充的缺失值的分布属于两条直线,这是因为每个变量的缺失值比较集中。

图3 使用缺失值前面的数据进行填充

下面针对oceandf数据集,使用method = "bfill"的方法,利用缺失值后面的数据进行缺填充,并可视化出填充后缺失值所在的位置。运行程序后,可获得如图4所示的散点图,可以发现填充的缺失值位置已经发生了改变。

图4 使用缺失值后面的值进行填充

使用均值对数据带有缺失值的变量进行填充,也是是常用的缺失值处理方法之一,下面先使用每个变量的缺失值对变量进行缺失值填充,然后使用同样的方式将缺失值处理结果进行可视化,运行程序后可获得如图5所示的图像。

图5 使用变量的均值进行缺失值填充

从上面的三种缺失值填充结果可以发现,针对该数据使用简单的缺失值填充方法,并不能获得很好的缺失值填充效果,造成这个结果的的一个重要原因,就是在缺失值填充时,只单一的分析一个变量,并不能从整体数据出发,不能借助样本的其它信息进行填充。因此,在下一篇文章将会介绍几种复杂的缺失值填补方法。

文章首发于微信公众号:Adam大数据分析小站微信公众号:AdamBigData

本文参考书籍:《Python机器学习算法与实战》——孙玉林,余本国 著

书籍介绍文章:宇智波带土:《Python机器学习算法与实战》-2021新书推荐



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有