• python对数组缺失值进行填充


    1. 两个常用的函数

    1.1 np.nonzero()

    np.nonzero()函数返回数组中不为False(0)的元素对应的索引

    a = np.array([1,2,0,3,1,0])
    print(np.nonzero(a))
    
    >>(array([0, 1, 3, 4], dtype=int64),)
    #返回数组中不为0元素的索引数组
    a = np.array([1,2,0,3,1,0])
    print(np.nonzero(a)[0])
    
    >>[0 1 3 4 5 7]
    #这里要注意使用的时候如果只需要索引数组,需要在后面加上[0],这样就只是返回索引数组
    #可以和上面对比来看

    1.2 np.isnan()

    np.isnan()函数判断一个数组各个元素是否为nan,并返回相同维度对应的bool数组

    a = np.array([1,2,0,np.nan,3,1,0,np.nan])
    print(np.isnan(a))
    
    >>[False False False  True False False False  True]
    #返回对数组进行空值检测的结果

    类似的还有np.~isnan()函数,顾名思义就是实值检测,对于非nan元素返回true,nan元素返回false,与isnan()函数刚好相反

    2. 实现一个缺失值填充函数

    在函数中我们通过上述函数实现计算同一特征非空数据的均值,并以此填充哪些空缺值

    # 加载包含NaN的数据集
    # 用平均值代替缺失值
    def replaceNaNWithMean():
        #载入数据
        datMat=loadDataSet('secom.data',' ')
       #获取特征维度     
        numFeat = shape(datMat)[1]
        #遍历数据集每一个维度
        for i in range(numFeat):
            #利用该维度所有非NaN特征求取均值
            #nonzero返回非空元素的索引
            #isnan和~isnan返回数组元素是否对应为空的True or False数组
            meanVal = mean(datMat[nonzero(~isnan(datMat[:,i].A))[0],i])
            #将该维度中所有NaN特征全部用均值替换
            #.A将matrix转化为ndarray,然后~isnan()获得对应bool数组
            #再通过nonzero()得到所有不为nan数据的索引数组
            #也即第i个特征不为nan的所有元素的索引,最后通过mean对这些元素求出平均值
            datMat[nonzero(isnan(datMat[:,i].A))[0],i] = meanVal
            #最后再用计算出来的平均值填充空值
        return datMat    #最后返回用平均值填充空缺值后的数组
  • 相关阅读:
    不足百行代码 实体数组转DataTable通用类
    【翻译】WEB安全设计规范(4.1)
    也为读者说几句(兼为什么要骂烂书译者)
    重用之前应仔细分析问题用错轮子有感
    最长代码有多长:不符[单一职责原则(SRP)]的常见设计
    "千里之堤毁于蚁穴"重点项目不能交付之谜(一)泥淖中的验收测试
    企业快速开发框架基于配置文件
    从面试题看高级软件工程师需要哪些技艺
    面试英语【转】
    测试
  • 原文地址:https://www.cnblogs.com/RB26DETT/p/10973921.html
Copyright © 2020-2023  润新知