文章目录
[ Pandas version: 1.0.1 ]
四、处理缺失值
(一)选择处理缺失值的方法
在数据表或 DataFrame 中有很多识别缺失值的方法。一般情况下可以分为两种:
- 一种方法是通过一个覆盖全局的掩码表示缺失值
- 另一种方法是用一个标签值表示缺失值
(二)Pandas的缺失值
Pandas用标签方法表示缺失值,包括两种Python原有的缺失值:浮点数据类型的 NaN 值,以及Python的 None 对象。
1. None: Python对象类型的缺失值
Pandas可以使用的第一种缺失值标签是 None,它是Python单体对象,经常在代码中表示缺失值。
由于 None 是一个Python对象,所以不能作为任何 NumPy/Pandas 数组类型的缺失值,只能用于’object’数组类型(由Python对象构成的数组)
import numpy as np
import pandas as pd
vals1 = np.array([1, None, 3, 4])
vals1 #输出:array([1, None, 3, 4], dtype=object)
# dtype=object表示NumPy认为这个数组是Python对象构成的。
# 虽然这种类型在某些情景中很有用,对数据的任何操作最终都会在Python层面完成。
# 但是在进行常见的快速操作时,这种类型比其他与原生类型数组要消耗更多的资源。
使用Python对象构成的数组意味着如果对一个包含 None 的数组进行累计操作(如sum(), min())会出现类型错误 TypeError
因此,在Python中没有定义整数与 None 之间的运算。
2. NaN: 数值类型的缺失值
另一种缺失值的标签是 NaN(全称 Not a Number,不是一个数字),是一种按照IEEE浮点数标准设计、在任何系统中都兼容的特殊浮点数。
vals2 = np.array([1, np.nan, 3, 4])
vals2 #输出:array([ 1., nan, 3., 4.])
vals2.dtype #输出:dtype('float64')
# Numpy会为这个数组选择一个原生浮点类型,意味着这个数组会被编译成C代码从而实现快速操作
NaN 会将与它接触过的数据同化,无论和 NaN 进行何种操作,最终结果都是NaN。
1 + np.nan #输出:nan
0 * np.nan #输出:nan
# 虽然这些累计操作的结果定义时合理的(无异常),但是并非总是有效的:
vals2.sum(), vals2.min(), va