【机器学习】【数据处理】Pandas 处理缺失值

时间:2022-03-20 10:18:52

目前很多流行的数据集都会存在数据缺失的现象。

一般我们在用Pandas处理缺失值的方法有两种:

           1.用覆盖全局的掩码来表示缺失值.(用布尔类型来代替原先数据/用0或1来表示)

           2.用一个标签值来表示缺失值.(用一个具体的自定义的数据来表示,如-9999.  或用None或NaN)

1.缺失值

具体使用哪种方法还需要看具体情况:

                            1.用掩码来处理会额外构造一个布尔数组,会增加存储

                            2.标签值方法缩小了可以被表示的有效值的范围,会增加额外的计算逻辑。而且NaN也不                                                               能够表示所有数据类型。

Pandas的缺失值:1.Python对象类型的缺失值None(Python中不能将None与整数相加)

                             2.数值类型对象的缺失值NaN(NaN是一种特殊的浮点数,不是整数、字符串等其它数据类型;

                                 且无论对和NaN做哪种操作,最终结果都是NaN)

Pandas中NaN与None的差异:实际上,Pandas把他们看成是可以等价交换的,合适的时候会将他们进行替换。

import pandas as pd
import numpy as np
pd.Series([1,np.nan,2,None])
Out[4]: 
0    1.0
1    NaN
2    2.0
3    NaN
dtype: float64


Pandas对不同缺失值的转换规则:

                  缺失值转换规则        NA标签值
floating浮点型            无变化         np.nan
object对象类型            无变化    None或np.nan
integer整数类型  强制转换为float64        np.nan
boolean布尔类型   强制转换为object  None或np.nan

2.处理缺失值

1. isnull()

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

2. notnull()

          与isnull()操作相反

3. dropna(how= , axis=)

          返回一个剔除缺失值的数据(无法单独剔除,只能剔除整列或整行)

4. fillna( method= , axis= )

           返回一个填充了缺失值的数据副本(一般直接fillna(-9999)就好

                                                                  method有‘ffill’:从前往后填充

                                                                                  ‘bfill’:从后往前填充)