
4.2 缺失值的处理
众所周知,在收入、交通事故等问题的研究中,因为被调查者拒绝回答或者由于调查研究中的损耗,会存在一些未回答的问题。例如,在一次人口调查中,15%的人没有回答收入情况,高收入者的回答率比中等收入者的回答率要低;或者在严重交通事故报告中,是否使用安全带和酒精浓度等关键问题在很多档案中都没有记录,这些缺失的记录便是缺失值。
4.2.1 Excel缺失值的处理
在Excel中处理缺失数据的方法主要有:删除缺失值、数据补齐(如特殊值填充、平均数填充等),由于操作比较简单,这里就不再进行详细介绍。
4.2.2 Python缺失值的检测
对于数值数据,Pandas库使用浮点值NaN(Not a Number)表示缺失数据。
在介绍使用Pandas库处理缺失值之前,先创建一个4名学生学习成绩的数据集,代码如下:

运行上述代码,创建的数据集如下所示。

使用isnull()函数判断是否是缺失值,代码如下:

代码输出结果如下所示。

4.2.3 Python缺失值的处理
在Python中,通常使用dropna()函数处理缺失值,该函数的功能是丢弃任何含有缺失值的行,代码如下:

代码输出结果如下所示。

设置参数how='all',表示只丢弃全为NaN的行,代码如下:

代码输出结果如下所示。

如果想要保留一部分缺失值数据,则可以使用thresh参数设置每一行非空数值的最小个数,代码如下:

代码输出结果如下所示。

为了演示如何处理列的缺失值,我们先增加一列空值数据和一列非空值数据,代码如下:

代码输出结果如下所示。

如果对列数据进行缺失值的操作,则可以设置参数axis=1,表示只要列中的数值存在空值就将其删除,代码如下:

代码输出结果如下所示。

设置参数how='all',表示删除数值全为空值的列,代码如下:

代码输出结果如下所示。

如果不想删除缺失数据,而是希望通过其他方式填补,则可以使用fillna()函数。通过使用fillna()函数就会将缺失值替换为相应的常数值,代码如下:

代码输出结果如下所示。

可以使用fillna()函数调用一个字典,实现对不同的列填充不同的值,代码如下:

代码输出结果如下所示。

设置参数method='ffill',表示向下填充数据,代码如下:

代码输出结果如下所示。

设置参数method='bfill',表示向上填充数据,代码如下:

代码输出结果如下所示。

还可以使用非空数值的平均数、最大值、最小值等填充缺失值。例如,使用缺失值所在列的平均数填充该列的缺失值,代码如下:

代码输出结果如下所示。
