Numpy 的空值
# NAN: not a number,不是一个数字的意思,属于浮点型,操作的需要注意数据类型
# INF infinity,代表的是无穷大的意思,属于浮点型,np.inf表示正无穷大,-np.inf表示负无穷大,一般在除数为0是出现无穷大
# NAN和NAN是不相等的,np.NAN!=np.NAN
# NAN和任何值做运算,结果都是NAN
#_*_coding:utf-8_*_
import numpy as np
#生成1个0-9,三行五列的数组data
data=np.random.randint(0,10,size=(3,5))
data
输出结果:
array([[8, 3, 2, 8, 0],
[5, 9, 8, 8, 6],
[5, 1, 4, 0, 0]])
#第一行,第二列赋值nan
data=data.astype(np.float)
data[0,1]=np.NAN
data
输出结果:
array([[ 8., nan, 2., 8., 0.],
[ 5., 9., 8., 8., 6.],
[ 5., 1., 4., 0., 0.]])
#除数为0出现inf
data/0
输出结果:
array([[inf, nan, inf, inf, nan],
[inf, inf, inf, inf, inf],
[inf, inf, inf, nan, nan]])
#处理空值的2种方法
#1、删除缺失值
#2.替换缺失值
data[1,2]=np.NAN
data
输出结果:
array([[ 8., nan, 2., 8., 0.],
[ 5., 9., nan, 8., 6.],
[ 5., 1., 4., 0., 0.]])
#查看哪个元素为NAN
#np.isnan()
np.isnan(data)
输出结果:
array([[False, True, False, False, False],
[False, False, True, False, False],
[False, False, False, False, False]])
#直接删掉数组中的NAN值,变为一维数组
data[~np.isnan(data)]
输出结果:
array([8., 2., 8., 0., 5., 9., 8., 6., 5., 1., 4., 0., 0.])
#第二种删除nan所在的行或者列
#找到nan的位置
np.where(np.isnan(data))
输出结果:
(array([0, 1], dtype=int64), array([1, 2], dtype=int64))
#删除含有NAN值的行
lines=np.where(np.isnan(data))[0]
np.delete(data,lines,axis=0)
输出结果:
array([[5., 1., 4., 0., 0.]])
#用其他值代替NAN值
#先读取文件,将文件转化为字符串类型,然后把空值赋值NAN,再转化为浮点,再把空值换成0
scores = np.loadtxt('scores.csv',delimiter=',',skiprows=1,dtype=np.str_)
scores[scores=='']=np.NAN
scores1=scores.astype(np.float)# 代码运行到这里就出问题, 提示‘na’不能转化为浮点暂时还没有找到问题所在。
scores1[np.isnan(score1)]=0
scores1.sum(axis=1)