想象一下,你正在为食谱准备食材,却发现厨房里少了些东西。同样,在处理数据时,你经常会遇到一些数据集,其中有些信息就是不完整的。这些空白点被称为缺失值。缺失值表示本应存在于特定观测(一行)和变量(一列)中的信息,但它却缺失了。你可以把它想象成电子表格或数据库表中一个空单元格,你原本期望在那里找到一条数据。缺失值如何呈现缺失数据在数据分析中,特别是在使用Python以及pandas和NumPy等库时,通常不会以字面上的空白呈现。相反,你通常会遇到一些特定的占位符:NaN (非数字): 这是你在pandas数据框和NumPy数组中数值数据里最常看到的表示形式。NaN是一个特殊的浮点值,用于表示未定义或无法表示的结果,它非常适合用来指示缺失的数值数据。None: Python的内置对象,表示值的缺失。你可能会在包含混合数据类型或主要是字符串的列中发现None,尽管pandas通常会在数值列中将None转换为NaN以保持一致性。NULL: 这是数据库(如SQL数据库)表示缺失信息的标准方式。当你从数据库导入数据时,这些NULL值通常会被你的数据加载工具转换为NaN或None。占位符: 有时,数据收集系统会使用特定的代码(如-1、999、"missing"或""(空字符串))来表示缺失信息。虽然这些看起来像常规数据,但它们表示缺失。识别和处理这些数据需要额外的小心,因为工具不会自动将它们识别为缺失值,除非你明确地告知它们。这里有一个小例子,说明缺失值在表中可能是什么样子:姓名年龄分数城市Alice2588New YorkBobNaN76LondonCharlie30NaNNaNDavid2295San Francisco在此表中,Bob的年龄缺失(NaN),Charlie的分数缺失(NaN),Charlie的城市也缺失(NaN)。{"layout": {"title": "列中缺失与存在数据的例子", "xaxis": {"title": "类别"}, "yaxis": {"title": "计数"}, "barmode": "stack"}, "data": [{"type": "bar", "name": "存在", "x": ["年龄", "分数", "城市"], "y": [3, 3, 3], "marker": {"color": "#339af0"}}, {"type": "bar", "name": "缺失", "x": ["年龄", "分数", "城市"], "y": [1, 1, 1], "marker": {"color": "#ff8787"}}]}上述示例表中“年龄”、“分数”和“城市”列的存在值和缺失值计数。它们为何构成问题正如本章引言中所述,这些缺失值不仅仅是表面问题。它们带来很大的挑战:计算错误: 对包含NaN的列执行数学运算(如求和或平均值)通常会导致NaN,从而使计算结果毫无用处。分析偏差: 如果缺失值不是随机的,它们的存在(或你如何处理它们)可能会使你的分析结果出现偏差,并导致不正确的结论。算法不兼容: 许多统计方法和机器学习算法不能直接处理缺失值,它们要么会产生错误,要么会默默地失败。理解缺失值是什么以及它们如何在数据中呈现,是你有效处理它们之前必不可少的第一步,这正是我们将在后续部分介绍的内容。