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    #最后返回用平均值填充空缺值后的数组
  • 相关阅读:
    html5学习系列之ef类标签
    html5学习系列之cd标签
    Java学习系列——xml学习基础
    html5学习系列——b标签
    为什么我要使用Linux,使用Linux的十个理由。
    设置Linux系统的空闲等待时间TMOUT的方法和Linux反空闲设置的两种方法
    创建动态MSSQL数据库表的方法
    SQL SERVER 自增列的方法
    XtraBackup构建MySQL主从环境的方法
    如何查看MySQL执行计划呢?
  • 原文地址:https://www.cnblogs.com/RB26DETT/p/10973921.html
Copyright © 2011-2022 走看看