【Python数据科学手册】Pandas——五、处理缺失值
文章目录
五、处理缺失值
涉及的缺失值主要有三种形式: null、 NaN 或 NA。
1.选择处理缺失值的方法
数据表或 DataFrame 中有很多识别缺失值的方法。一般情况下可以分为两种:一种方法是通过一个覆盖全局的掩码表示缺失值,另一种方法是用一个标签值(sentinel value)表示缺失值。
2.Pandas的缺失值
Pandas 最终选择用标签方法表示缺失值,包括两种 Python 原有的缺失值:浮点数据类型的 NaN 值,以及 Python 的 None 对象。
1).None: Python对象类型的缺失值
它是一个 Python 单体对象,不能作为任何 NumPy / Pandas 数组类型的缺失值,只能用于 ‘object’ 数组类型(即由 Python 对象构成的数组)
这种类型比其他原生类型数组要消耗更多的资源.
使用 Python 对象构成的数组就意味着如果你对一个包含 None 的数组进行累计操作,如sum() 或者 min(),那么通常会出现类型错误
2).NaN: 数值类型的缺失值
缺失值的标签是 NaN(全称 Not a Number, 不是一个数字),是一种按照 IEEE 浮点数标准设计、在任何系统中都兼容的特殊浮点数
可以把 NaN 看作是一个数据类病毒——它会将与它接触过的数据同化
累计操作的结果定义是合理的(即不会抛出异常),但是并非总是有效的
NumPy 也提供了一些特殊的累计函数,它们可以忽略缺失值的影响
3).Pandas中NaN与None的差异
Pandas 把它们看成是可以等价交换的,在适当的时候会将两者进行替换
Pandas 会将没有标签值的数据类型自动转换为 NA。将整型数组的缺失值强制转换为浮点数,Pandas 还会自动将 None 转换为NaN。
- Pandas对不同类型缺失值的转换规则
类型 | 缺失值转换规则 | NA标签值 |
---|---|---|
floating 浮点型 | 无变化 | np.nan |
object 对象类型 | 无变化 | None 或 np.nan |
integer 整数类型 | 强制转换为 | float64 np.nan |
boolean 布尔类型 | 强制转换为 | object None 或 np.nan |
Pandas 中字符串类型的数据通常是用 object 类型存储的