精华内容
下载资源
问答
  • 数据分析缺失值与异常值常见处理方法 在数据分析中常常会遇到数据残缺不全或异常的情况,下面介绍几种常见的处理方法 丢弃 这种效率最高,操作最简单,但是丢弃数据会损失部分信息。主要适用于,丢弃缺失大量数据的...

    数据分析缺失值与异常值常见处理方法

    在数据分析中常常会遇到数据残缺不全或异常的情况,下面介绍几种常见的处理方法

    丢弃

    这种效率最高,操作最简单,但是丢弃数据会损失部分信息。主要适用于,丢弃缺失大量数据的行或列,或者丢弃大量数据项中极少的数据缺失项

    补全

    顾名思义即使用科学的方法补全数据,这种方法对后续的建模大有好处

    1. 统计法
      使用均值,加权均值,众数等统计量进行补全
    2. 模型法
      基于现有数据使用神经网络等算法预测缺失值

    真值转换法

    当缺失值或异常值为属性时,把缺失值或异常值当做一种属性值。

    展开全文
  • 缺失值处理方法

    万次阅读 多人点赞 2017-08-24 13:38:44
    文章将常见的自己能理解的一些缺失值处理方法以及方法的优缺点做了简单介绍。其中,多重插补、EM算法对缺失值处理尚未掌握,因此并未放上来。 一、数值缺失机制 1.完全随机缺失(MCAR):缺失数据与该变量的真实...


    本文参考了多篇CSDN、知乎以及百度的文章,如果侵犯了您的权益,请及时联系,这是自己写的第一篇博客,有很多不足之处,请原谅。

    文章将常见的自己能理解的一些缺失值的处理方法以及方法的优缺点做了简单介绍。其中,多重插补、EM算法对缺失值的处理尚未掌握,因此并未放上来。

    一、数值缺失机制

    1.完全随机缺失(MCAR):缺失数据与该变量的真实值无关,与其他变量的数值也无关。

     举例:一位老师抱着批改完的卷子走在路上,不小心摔倒丢失了几张卷子,因此有几位同学没有成绩。这种成绩缺失不是因为成绩这个变量本身高或低而丢失的,而是随机丢失的;也与性别等无关,不会出现男生卷子丢失概率高,女生卷子丢失概率低的问题。

    2.条件随机缺失(MAR):缺失数据与其他变量有关。

     举例:我们的目标是要统计一个班学生的基本信息,包括名字、性别、身高、体重等。而此时如果某一学生的体重这一变量缺失,这一事件最可能发生在哪些人身上呢?一般来说,是女生。因此体重缺失与已知变量性别相关,这就叫做条件随机缺失。

    3.非随机缺失(NNAR):缺失数据依赖于该变量本身。

     举例:通常在收集数据时收入一栏很容易缺失,发生这种情况的原因可能是填写人收入过高或过低。因此收入缺失与填写人本身收入有关,这就叫做非随机缺失。

    4.完全变量:数据集中不含缺失值的变量称为完全变量。

    5.不完全变量:数据集中含有缺失值的变量称为不完全变量。

    PS:缺失值不仅包括NULL,也包括用于表示数值缺失的一些特殊数值(比如,在系统中用-999来表示数值不存在)。

    二、缺失值处理方法

      缺失值的处理,从总体上来说分为删除存在缺失值的个案和缺失值插补两种。但对于主观数据,人将影响数据的真实性,存在缺失值的记录的其他属性的真实值也不能保证,那么依赖于这些属性值的插补也是不可靠的,所以对于主观数据一般不推荐插补的方法。插补主要针对客观数据,它的可靠性有保证。

    (一)删除

      删除有缺失数据的样本;

      删除有过多缺失数据的变量。

     删除法是最简单直接、很多时候也是最有效的方法,缺点是会导致信息丢失。

     如果缺失数据属于完全随机缺失,简单删除法的后果仅仅是减少了样本量,导致信息量减少。但缺失数据通常都不是MCAR,若采用简单删除法就会使得估计系数出现偏误。

     如何判断是否MCAR?

     用其他变量预测缺失情况,如果某些系数显著,则不属于MCAR

    (二)填补

      以最可能的值来插补缺失值比删除全部不完全样本所产生的信息丢失要少。在数据挖掘中,面对的通常是大型的数据库,它的属性有几十个甚至几百个,因为一个属性值的缺失而放弃大量的其他属性值,这种删除是对信息的极大浪费。

    1.替代

     (1)均值插补

     1)均值插补、众数插补

     利用均值、中位数、众数、随机数等进行插补

     缺点:人为增加了噪声

     2)同类均值插补

     利用聚类方法预测缺失记录种类,再以该类均值对缺失值进行插补。

     3)同类均值随机插补

     在利用上述方法进行均值插补时,会存在一个问题:但凡是同类样本,对该变量的预测值都是相同的。为了解决这一问题,在进行数值插补时,我们可以生成正态随机数,其中均值为该类样本均值,方差为该类样本方差。

     (2)近似替代

     1)就近补齐

     对于一个包含空值的对象,就近补齐在完整数据中找到一个与它最相似的对象,然后用这个相似对象的值来进行填充。不同的问题可能会选用不同的标准来对相似进行判定。该方法概念上很简单,且利用了数据间的关系来进行空值估计。这个方法的缺点在于难以定义相似标准,主观因素较多。

     2)K近邻

     先根据欧式距离或相关分析来确定距离缺失数据最近的K个样本,将这K个值加权平均来估计该样本的缺失数据。

    2.模型预测

     利用其它变量做模型进行缺失变量的预测

     缺陷:如果其它变量与缺失变量无关,则预测的结果毫无意义。如果预测结果相当准确,则又说明这个变量完全没有必要进行预测。一般情况下,会介于两者之间;填补缺失值之后引入了自相关,这会给后续分析造成障碍。

     利用模型预测缺失变量的方法无穷无尽,这里仅简单介绍几种。

    1)回归

     基于完整的数据集,建立回归方程。对于包含空值的对象,将已知属性值代入方程来估计未知属性值,以此估计值来进行填充。当变量不是线性相关或预测变量高度相关时会导致有偏差的估计。

    2)极大似然估计

     在缺失类型为随机缺失的条件下,假设模型对于完整的样本是正确的,通过观测数据的边际分布可以对缺失数据进行极大似然估计。

     重要前提:适用于大样本。有效样本的数据量足以保证ML估计值是渐进无偏的并且服从正态分布。但这种方法可能会陷入局部极值,收敛速度也不是很快,并且计算很复杂。

     极大似然估计要求模型的形式必须准确,如果参数形式不正确,将得到错误的结论。

    3)灰度理论

    4)随机森林

    (三)不作处理

      在实际应用中,一些模型无法应对具有缺失值的数据,因此要对缺失值进行处理;然而还有一些模型本身就可以应对具有缺失值的数据,此时无需对数据进行处理。

      缺点:模型的选择上有所局限

    1.把缺失值当做变量的一种特例

     比如性别,原本只有男、女两种取值,现在变为男、女、缺失三种。

    2.引入虚拟变量

     将性别映射为3个变量:是否男、是否女、是否缺失。

     优点:保留了原始数据的全部信息;

     只有在样本量非常大的时候效果才好,否则会因为过于稀疏,效果很差。

    缺点:计算量大大提升。

    3.矩阵分解

      最后引用一段来自知乎的回答:我认为缺失值填补的精髓就在于不能影响整体的估计,它就只能是占个位置,让程序运行下去,让已有的别的属性的值能发挥作用。填补数与已有的数的分布、特征应符合,不能因为这些数字的变更导致估计值变化。

    待解决:多重插补、EM算法样条插值

    展开全文
  • 在实际应用中对于数据进行分析的时候,经常能看见缺失值,下面来介绍一下如何利用pandas来处理缺失值常见的缺失值处理方式,过滤、填充。 缺失值的判断 pandas使用浮点值NaN(Not a Number)表示浮点数和非浮点...

    在实际应用中对于数据进行分析的时候,经常能看见缺失值,下面来介绍一下如何利用pandas来处理缺失值。常见的缺失值处理方式有,过滤、填充。

    缺失值的判断

    pandas使用浮点值NaN(Not a Number)表示浮点数和非浮点数组中的缺失值,同时python内置None值也会被当作是缺失值。
    在这里插入图片描述

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

    函数作用:删除含有空值的行或列

    • axis:维度,axis=0表示index行,axis=1表示columns列,默认为0

    • how:"all"表示这一行或列中的元素全部缺失(为nan)才删除这一行或列,"any"表示这一行或列中只要有元素缺失,就删除这一行或列

    • thresh:一行或一列中至少出现了thresh个才删除。

    • subset:在某些列的子集中选择出现了缺失值的列删除,不在子集中的含有缺失值得列或行不会删除(有axis决定是行还是列)

    • inplace:刷选过缺失值得新数据是存为副本还是直接在原数据上进行修改。

    默认参数:删除行,只要有空值就会删除,不替换。

    df = pd.DataFrame({"name": ['Alfred', 'Batman', 'Catwoman'],
                       "toy": [np.nan, 'Batmobile', 'Bullwhip'],
                       "born": [pd.NaT, pd.Timestamp("1940-04-25"), pd.NaT]})
    
    # print(df)
    '''
           name        toy       born
    0    Alfred        NaN        NaT
    1    Batman  Batmobile 1940-04-25
    2  Catwoman   Bullwhip        NaT
    '''
    
    print(df.dropna())
    '''
         name        toy       born
    1  Batman  Batmobile 1940-04-25
    '''
    
    print(df)
    '''
           name        toy       born
    0    Alfred        NaN        NaT
    1    Batman  Batmobile 1940-04-25
    2  Catwoman   Bullwhip        NaT
    '''
    
    
    #delete colums
    print(df.dropna(axis=1) )#delete co
    '''
           name
    0    Alfred
    1    Batman
    2  Catwoman
    '''
    
    #"所有值全为缺失值才删除"
    print(df.dropna(how='all'))
    '''
           name        toy       born
    0    Alfred        NaN        NaT
    1    Batman  Batmobile 1940-04-25
    2  Catwoman   Bullwhip        NaT
    '''
    
    #"至少出现过两个缺失值才删除"
    print(df.dropna(thresh=2))
    '''
           name        toy       born
    1    Batman  Batmobile 1940-04-25
    2  Catwoman   Bullwhip        NaT
    '''
    
    #"删除这个subset中的含有缺失值的行或列"
    print (df.dropna(subset=['name', 'born']))
    '''
         name        toy       born
    1  Batman  Batmobile 1940-04-25
    '''
    
    

    DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)

    函数作用:填充缺失值

    • value:需要用什么值去填充缺失值

    • axis:确定填充维度,从行开始或是从列开始

    • method:ffill:用缺失值前面的一个值代替缺失值,如果axis =1,那么就是横向的前面的值替换后面的缺失值,如果axis=0,那么则是上面的值替换下面的缺失值。backfill/bfill,缺失值后面的一个值代替前面的缺失值。注意这个参数不能与value同时出现

    • limit:确定填充的个数,如果limit=2,则只填充两个缺失值。

    
    df = pd.DataFrame([[np.nan, 2, np.nan, 0],
                       [3, 4, np.nan, 1],
                       [np.nan, np.nan, np.nan, 5],
                       [np.nan, 3, np.nan, 4]],
                      columns=list('ABCD'))
    
    print(df)
    '''
         A    B   C  D
    0  NaN  2.0 NaN  0
    1  3.0  4.0 NaN  1
    2  NaN  NaN NaN  5
    3  NaN  3.0 NaN  4
    '''
    
    #"横向用缺失值前面的值替换缺失值"
    print(df.fillna(axis=1, method='ffill'))
    '''
         A    B    C    D
    0  NaN  2.0  2.0  0.0
    1  3.0  4.0  4.0  1.0
    2  NaN  NaN  NaN  5.0
    3  NaN  3.0  3.0  4.0
    '''
    
    
    #"纵向用缺失值上面的值替换缺失值"
    print(df.fillna(axis=0,method='ffill'))
    '''
         A    B   C  D
    0  NaN  2.0 NaN  0
    1  3.0  4.0 NaN  1
    2  3.0  4.0 NaN  5
    3  3.0  3.0 NaN  4
    '''
    
    print(df.fillna(0))
    '''
         A    B    C  D
    0  0.0  2.0  0.0  0
    1  3.0  4.0  0.0  1
    2  0.0  0.0  0.0  5
    3  0.0  3.0  0.0  4
    '''
    

    不同的列用不同的值填充:,可以通过一个字典用fillna,实现对不同的列填充不同的值

    #不同的列用不同的值填充:
    
    values={'A':0,'B':1,'C':2,'D':3}
    print(df.fillna(value=values))
    '''
         A    B    C  D
    0  0.0  2.0  2.0  0
    1  3.0  4.0  2.0  1
    2  0.0  1.0  2.0  5
    3  0.0  3.0  2.0  4
    '''
    

    对每列出现的替换值有次数限制,此处限制为一次

    values={'A':0,'B':1,'C':2,'D':3}
    print(df.fillna(value=values,limit=1))
    '''
         A    B    C  D
    0  0.0  2.0  2.0  0
    1  3.0  4.0  NaN  1
    2  NaN  1.0  NaN  5
    3  NaN  3.0  NaN  4
    '''
    

    DataFrame.isna()

    判断是不是缺失值:
    在这里插入图片描述
    isnull同上。

    替换空值:

    df = pd.DataFrame([[np.nan, 2, np.nan, 0],
                       [3, 4, "", 1],
                       [np.nan, np.nan, np.nan, 5],
                       [np.nan, 3, "", 4]],
                      columns=list('ABCD'))
    
    print(df)
    '''
         A    B    C  D
    0  NaN  2.0  NaN  0
    1  3.0  4.0       1
    2  NaN  NaN  NaN  5
    3  NaN  3.0       4
    '''
    

    如上,缺失值是NAN,空值是没有显示。

    替换空值代码:需要把含有空值的那一列提出来单独处理,然后在放进去就好。

    clean_z = df['C'].fillna(0)
    clean_z[clean_z==''] = 'hello'
    df['C'] = clean_z
    print(df)
    '''
         A    B      C  D
    0  NaN  2.0      0  0
    1  3.0  4.0  hello  1
    2  NaN  NaN      0  5
    3  NaN  3.0  hello  4
    '''
    
    展开全文
  • pandas处理缺失值

    万次阅读 2018-01-09 20:59:20
    在实际应用中对于数据进行分析的时候,经常能看见缺失值,下面来介绍一下如何利用pandas来处理缺失值常见的缺失值处理方式,过滤、填充。 一、缺失值的判断 pandas使用浮点值NaN(Not a Number)表示浮点数和非...

    在实际应用中对于数据进行分析的时候,经常能看见缺失值,下面来介绍一下如何利用pandas来处理缺失值。常见的缺失值处理方式有,过滤、填充。

    一、缺失值的判断

    pandas使用浮点值NaN(Not a Number)表示浮点数和非浮点数组中的缺失值,同时python内置None值也会被当作是缺失值。

    a、Series的缺失值判断

        s = Series(["a","b",np.nan,"c",None])
        print(s)
        '''
        0       a
        1       b
        2     NaN
        3       c
        4    None
        '''
        #判断缺失值,如果是则返回True,否则返回False
        print(s.isnull())
        '''
        0    False
        1    False
        2     True
        3    False
        4     True
        '''
        #输出缺失值的索引和值
        print(s[s.isnull()])
        '''
        2     NaN
        4    None
        '''
    展开全文
  • 机器学习中处理缺失值的9种方法

    千次阅读 2020-10-31 11:01:04
    数据科学就是关于数据...在这个文章中,我将分享处理数据缺失的9种方法,但首先让我们看看为什么会出现数据缺失以及多少类型的数据缺失。 不同类型的缺失值 缺失的值主要三种类型。 完全随机缺失(MCAR):当数据为.
  • pandas如何处理缺失值

    2020-12-31 04:35:53
    在实际应用中对于数据进行分析的时候,经常能看见缺失值,下面来介绍一下如何利用pandas来处理缺失值常见的缺失值处理方式,过滤、填充。 一、缺失值的判断 pandas使用浮点值NaN(Not a Number)表示浮点数和非...
  • 缺失值处理的三种方法

    万次阅读 2019-03-12 20:48:23
    缺失值处理的三种方法:直接使用含有缺失值的特征;删除含有缺失值的特征(该方法在包含缺失值的属性含有大量缺失值而仅仅包含极少量有效值时是有效的);缺失值补全。 常见缺失值补全方法:均值插补、同类均值...
  • Pandas数据处理之处理缺失值

    千次阅读 2019-06-21 15:13:54
    3.5.1 选择处理缺失值方法  在DataFrame中很多识别缺失值的方法。一般情况下分为两种: 通过一个单独的同样大小的掩码df来表示缺失值 用一个标签值(如NaN)表示缺失值   在掩码方法中,掩码可能是一个于原...
  • 缺失值处理----缺失值填充方法总结

    千次阅读 2020-10-01 16:44:24
    对于特征值缺失的一种常见方法就是可以用固定值来填充,例如0,9999, -9999, 例如下面对灰度分这个特征缺失值全部填充为-99 data['灰度分'] = data['灰度分'].fillna('-99') 2. 用均值填充 对于数值型的特征,其...
  • 机器学习中处理缺失值的7种方法

    千次阅读 2020-12-03 15:19:41
    机器学习中处理缺失值的7种方法 转载 |https://cloud.tencent.com/developer/article/1680427 作者 | Satyam Kumar 编译 | VK 来源 | Towards Data Science 现实世界中的数据往往很多缺失值。丢失值的原因...
  • 缺失值处理方法

    千次阅读 2019-08-22 13:27:34
    本文针对缺失值和特殊值这种数据质量问题,进行了初步介绍并推荐了一些处理方法。 值得注意的是,这里所说的缺失值,不仅包括数据库中的NULL值,也包括用于表示数值缺失的特殊数值(比如,在系统中用-999来表...
  • 缺失值补充 造成属性值缺失的原因很多,比如信息暂时无法获取,信息被遗漏(机械原因也人为原因),有些对象的某个或者某些属性是不可用的,有些信息被认为是不重要的,获取这些信息的代价太大,系统实时性能...
  • 数据预处理——4种缺失值处理方法

    千次阅读 2020-07-28 17:52:15
    简单删除法是对缺失值进行处理的最原始方法。它将存在缺失值的个案删除。如果数据缺失问题可以通过简单的删除小部分样本来达到目标,那么这个方法是最有效的。当缺失值的类型为非完全随机缺失的时候,可以通过对完整...
  • 样本缺失值处理

    千次阅读 2020-09-22 17:16:56
    在构建模型训练时,需要对数据进行清洗,最常见的一种操作:缺失值处理。 当我们拿到一批数据的时候,往往都是“不干净”的,而缺失值是最常见也是最容易发现的。不同的缺失值处理方式对接下来的特征提取,建模等都...
  • pandas 缺失值处理

    2019-04-05 09:58:02
    文章目录创建数据判断是否有缺失值及统计删除含有缺失值的行、列缺失值补充缺失值替换 创建数据 import pandas as pd import numpy as np data = pd.DataFrame({'a': [1, 2, 4, np.nan,7, 9], 'b': ['a', 'b', np....
  • 缺失值处理方法 直接删除法 填充法 K最近距离邻法(K-means clustering) 多重填补(Multiple Imputation,MI) 缺失值处理的类库 sklearn中关于缺失值处理类 ​ R语言通过mice包应用多重插补的步骤 代码...
  • 缺失值填充的几种方法

    万次阅读 多人点赞 2018-09-12 22:59:51
    常见缺失值填充方法有填充默认值、均值、众数、KNN填充、以及把缺失值作为新的label通过模型来预测等方式,为了介绍这几种填充方法的使用以及填充效果,本文将在真实数据集上进行简单比较。 1. 数据集介绍 数据...
  • 处理缺失值 实践中数值计算不可或缺,好在很多方法可用,这个主题将介绍其中一些。不过,这些方法未必能解决你的问题。 scikit-learn一些常见的计算方法,它可以对现有数据进行变换填补NA值。但是,如果...
  • 以下是记录我学习过程中碰到的一些问题...以及解决的方法。1. &\& 是位运算 与 \ 是续行的 意思。2. pandas argmax()... 缺失值填补方法(基于pandas).dropna()填充值 a.add(b, fill_value=0)...
  • 文章目录四、处理缺失值(一)选择处理缺失值方法(二)Pandas的缺失值1. None: Python对象类型的缺失值2. NaN: 数值类型的缺失值3. Pandas中 NaN 与 None 的差异(三)处理缺失值1. 发现缺失值2. 剔除缺失值3. ...
  • 数据清理/探索性数据分析阶段的主要问题之一是处理缺失值。 缺失值表示未在观察值中作为变量存储的数据值。 这个问题在几乎所有研究中都是常见的,并且可能对可从数据得出的结论产生重大影响。 查看数据中的缺失值...
  • 读取csv文件时常见缺失值有如下类型。 空数据 0 NA 其他表示形式,如‘null’ 一、空数据和NA数据以及其他表示空的数据 创建一个测试文件,从中可以看出,空数据或者是NA数据都会被默认为是NaN。并且在文件中...
  • 检测与处理缺失值 ''' isnull: 判断元素是空值的方法,如果是空值返回--True,否则--False notnull: 判断元素不是空值的方法,如果不是空值返回--True,否则--False ''' print(data.notnull()) # True/False data1=data...
  • 数据缺失值的4种处理方法

    万次阅读 2014-11-07 07:57:03
    一、缺失值产生的原因 缺失值的产生的原因多种多样,主要分为机械原因和人为原因。机械原因是由于机械原因导致的数据收集或保存的失败造成的数据缺失,比如数据存储的失败,存储器损坏,机械故障导致某段时间数据...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 31,397
精华内容 12,558
关键字:

常见的处理缺失值的方法有