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 #最后返回用平均值填充空缺值后的数组
python对数组缺失值进行填充的更多相关文章
- python数据结构-数组/列表/栈/队列及实现
首先 我们要分清楚一些概念和他们之间的关系 数组(array) 表(list) 链表(linked list) 数组链表(array list) 队列(queue) 栈(stack) li ...
- Python Pandas找到缺失值的位置
python pandas判断缺失值一般采用 isnull(),然而生成的却是所有数据的true/false矩阵,对于庞大的数据dataframe,很难一眼看出来哪个数据缺失,一共有多少个缺失数据,缺 ...
- python使用数组作为索引遍历数组
python使用数组作为索引遍历数组 觉得有用的话,欢迎一起讨论相互学习~Follow Me python使用数组作为索引遍历数组 import numpy as np a=np.arange(0,5 ...
- LeetCode初级算法的Python实现--数组
LeetCode初级算法的Python实现--数组 # -*- coding: utf-8 -*- """ @Created on 2018/6/3 17:06 @aut ...
- Python检查数组元素是否存在类似PHPisset()方法
Python检查数组元素是否存在类似PHP isset()方法 sset方法来检查数组元素是否存在,在Python中无对应函数,在Python中一般可以通过异常来处理数组元素不存在的情况,而无须事先检 ...
- Python 切分数组,将一个数组均匀切分成多个数组
Python 切分数组 将一个数组,均分为多个数组 代码 # -*- coding:utf-8 -*- # py3 def list_split(items, n): return [items[i: ...
- Python求解数组重新组合求最小值(优酷)
题目描述:题目:含有n个元素的整型数组,将这个n个元素重新组合,求出最小的数,如(321,3,32,) 最小数为321323 题目分析: 将数组中所有元素填充到个数相等,填充的数字为最后一位的数字,如 ...
- python创建数组的方法
一 直接定义法: 1.直接定义 matrix=[0,1,2,3] 2.间接定义 matrix=[0 for i in range(4)] print(matrix) 二 Numpy方法: Numpy内 ...
- Python虚拟机类机制之填充tp_dict(二)
填充tp_dict 在Python虚拟机类机制之对象模型(一)这一章中,我们介绍了Python的内置类型type如果要完成到class对象的转变,有一个重要的步骤就是填充tp_dict对象,这是一个极 ...
随机推荐
- mpvue + Vant weapp + 微信云服务 打造小程序应用
写在前面的话: 从事小程序开发已经大半年的时间了,但是一直都是再用原生写项目.一直想着用框架自己写一个小程序,但苦于一直没有时间.正好最近项目搁置,有了空闲时间,就研究了下mpvue + Vant w ...
- java 三羊献瑞
三羊献瑞 观察下面的加法算式: 其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字. 请你填写"三羊献瑞"所代表的4位数字(答案唯一),不要填写任何多余内容. public ...
- POJ 1330:Nearest Common Ancestors
Nearest Common Ancestors Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 20940 Accept ...
- JavaScript中的面向对象及有关应用
面向对象(OOP:Object Oriented Programming) 面向对象的概念 面向对象是一种程序设计思想,将数据和处理数据的程序封装到对象中. 特性:抽象.继承.封装.多态. 优点:提 ...
- java流程控制语句要点
java流程控制语句要点 一.java7增强后的switch switch语句后面的控制表达式的数据类型只能是byte.short.char.int四种整数类型,不能是boolean类型,java7以 ...
- P 1017
转跳点:
- UVA - 1149 Bin Packing(装箱)(贪心)
题意:给定N(N<=10^5)个物品的重量Li,背包的容量M,同时要求每个背包最多装两个物品.求至少要多少个背包才能装下所有的物品. 分析:先排序,从最重的开始装,如果重量小于M,则如果能装一个 ...
- mac安装vue没有使用权限不足
➜ ~ vue init webpack frontend ⠋ downloading template /usr/local/lib/node_modules/vue-cli/node_modul ...
- css设置兄弟节点的样式(相邻的前一个节点)
产品需求:想在鼠标移动到“移除”的时候,“1.产品匹配测试”添加下划线和更改字体颜色 需求分析:从需求可以看出使用 :hover 就可以解决的问题,但是在实践中发现兄弟选择器(+)不好使,(+)只能是 ...
- POJ 2632:Crashing Robots
Crashing Robots Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8424 Accepted: 3648 D ...