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

xiaoxiao2021-02-28  66

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

一般我们在用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=)

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

    df.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)

axis= 0 按行检查缺失;1 按列检查缺失。不写默认为0how= 'any' 有一个缺失值就算缺失;'all' 行或列(根据axis参数)全缺失才算缺失。不写默认为'any'thresh= x,x为一个整数,含义为行或列(根据axis参数)中非缺失数值个数大于等于x则不算缺失,即小于x则算缺失,会被去除。subset= 标签名。选择要对哪个列或行(与axis中的相反)进行检查缺失,没写的则不检查。即限制检查范围。

4. fillna( method= , axis= )

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

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

                                                                                  ‘bfill’:从后往前填充)

 

 

转载请注明原文地址: https://www.6miu.com/read-2627908.html

最新回复(0)