zoukankan      html  css  js  c++  java
  • 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    #最后返回用平均值填充空缺值后的数组
  • 相关阅读:
    Software Solutions CACHE COHERENCE AND THE MESI PROTOCOL
    CACHE COHERENCE AND THE MESI PROTOCOL
    Multiprocessor Operating System Design Considerations SYMMETRIC MULTIPROCESSORS
    Organization SYMMETRIC MULTIPROCESSORS
    PARALLEL PROCESSING
    1分钟内发送差评邮件
    Secure Digital
    SYMMETRIC MULTIPROCESSORS
    A Taxonomy of Parallel Processor Architectures
    parallelism
  • 原文地址:https://www.cnblogs.com/RB26DETT/p/10973921.html
Copyright © 2011-2022 走看看