python pandas缺失值处理_Python笔记:Pandas处理缺失值

1,Pandas的缺失值

Pandas选用标签方法表示缺失值,包括两种python原有的缺失值:浮点数据类型的NaN值,以及python的None对象。

1.1 None:python对象类型的缺失值

Pandas可以使用的第一种缺失值标签是None,它是一个Python单体对象,经常在代码中表示缺失值。由于None是一个Python对象,

所以不能作为NumPy/Pandas数组类型的缺失值,只能用于object数组类型。

这里的dtype=object表示NumPy认为由于这个数组是Python对象构成的,因此将其类型判断为object。

使用Python对象构成的数组意味着如果对一个包含None的数组进行累积操作,如果sum()或者min(),那么通常会出现类型错误:

这就是说,在Python中没有定义整数与None之间的加法运算。

1.2 NaN : 数值类型的缺失值

另一种缺失值的标签是NaN(全称Not a Number:不是一个数字),是一种在任何系统中都兼容的特殊浮点数。

可以把NaN看作是一个数据病毒---->它会将与接触过的数据同化,即无论和NaN进行何种操作,最终结果都是NaN:

这样的操作结果虽然定义合理,但是难免会造成一些困扰

为此NumPy也提供了一些特殊的累计函数,它们可以忽略缺失值的影响

需谨记,NaN是一种特殊的浮点数,不是整数、字符串等其它数据类型。

1.3,Pandas中NaN与None的差异

虽然NaN与None各有各的用处,但是Pandas把它们看成是可以等价交换的,在适当的时候会将两者进行替换

Pands会将没有标签值得数据类型自动转换为NA,例如,当我们将整形数据中的一个值设置为np.nan时,这个值就会强制转换为浮点数缺失值NA。

2 处理缺失值

Pandas提供了一些方法来发现,剔除,替换数据结构中的缺失值:

isnull() : 创建一个布尔类型的掩码标签缺失值

notnull() : 与isnull相反

dropna() : 返回一个剔除缺失值的数据

fillna() : 返回一个填充了缺失值的数据副本。

2.1 发现缺失值

Pandas数据结构有两种有效的方法发现缺失值:isnull()和notnull(),每种方法都返回布尔类型的掩码数据。

前面介绍过,布尔类型掩码数组可以直接作为Series或DataFrame的索引使用

2.2 剔除缺失值

除了前面介绍的掩码方法,还有两种很好用的缺失值处理方法,分别是dropna():剔除缺失值和fillna():填充缺失值。

而在DataFrame上使用他们时需要设置一些参数

我们没办法从DataFrame中单独剔除一个值,要么是剔除缺失值所在的整行,要么是整列。

根据实际需求,有时需要剔除整行,有时可能是整列,DataFrame中的dropna()会有一些参数可以配置。

默认情况下,dropn()会剔除任何包含缺失值的整行数据

但是这样做也会把非缺失值一并剔除,因为可能有时候只需要全部是缺失值的行或列,或者绝大多数是缺失值的行或列。

这些需求可以通过设置how或thresh参数来满足。他们可以设置剔除行或列缺失值的数量阈值。

默认设置是how='any',也就是说只要有缺失值就剔除整行或者整列(通过axis设置坐标轴)。你还可以设置how='all',这样就只会剔除全部是缺失值的行或列了。

还可以通过thresh参数设置行或列中非缺失值的最下数量,从而实现更加个性化的配置

2.3 填充缺失值

有时我们并不想移除缺失值,而是想把他们替换为有效的数值。有效的值有可能是0,1,2那样单独的值,也可能是经过填充或转换得到的,除了isnull()方法建立掩码来填充缺失值,Pandas为此专门提供了一个fillna()方法,它将返回缺失值后的数组副本。

DataFrame的操作方法与Series类似,只是在填充时需要设置坐标轴参数axis

需要注意的是,假如在从前往后填充时,需要填充的缺失值前面没有值,那么它就仍然是缺失值

你可能感兴趣的:(python,pandas缺失值处理)