首页 » python机器学习 » python机器学习全文在线阅读

《python机器学习》4.1 缺失数据的处理

关灯直达底部

在实际应用过程中,样本由于各种原因缺少一个或多个值的情况并不少见。其原因主要有:数据采集过程中出现了错误,常用的度量方法不适用于某些特征,或者在调查过程中某些数据未被填写,等等。通常,我们见到的缺失值是数据表中的空值,或者是类似于NaN(Not A Number,非数字)的占位符。

遗憾的是,如果我们忽略这些缺失值,将导致大部分的计算工具无法对原始数据进行处理,或者得到某些不可预知的结果。因此,在做更深入的分析之前,必须对这些缺失值进行处理。而在讨论处理缺失值的几个技巧之前,我们先通过一个CSV(comma-separed values,以逗号为分隔符的数值)文件构造一个简单的例子,以便更好地把握问题的核心所在:

在上述代码中,我们通过read_csv函数将CSV格式的数据读取到pandas的数据框(DataFrame)中,可以看到:其中有两个缺失值由NaN替代。示例代码中的StringIO函数在此仅起到演示作用:如果我们的数据是存储在硬盘上的CSV文件,就可以通过此函数以字符串的方式从文件中读取数据,并将其转换成DataFrame的格式赋值给csv_data。

对于大的DataFrame来说,手工搜索缺失值是极其繁琐的,在此情况下,我们可以使用代码中的isnull方法返回一个布尔型的DataFrame值,若DataFrame的元素单元包含数字型数值则返回值为假(False),若数据值缺失则返回值为真(True)。通过sum方法,我们可以得到如下所示的每列中缺失值数量:

通过这种方式,我们可以得到每列中缺失值的数量。在下面的小节中,我们将学习几种不同的处理缺失数据的策略。

虽然scikit-learn是在NumPy数组的基础上开发的,但有时使用pandas的DataFrame来处理数据会更为方便。在我们使用scikit-learn处理数据之前,可以通过DataFrame的value属性来访问相关的NumPy数组: