一,nunpy中的nan和inf
1,nan(not a number):
表示不是一个数字
当我们读取本地文件为float的时候,如果有缺失,就会出现nan;
2,inf:
表示正无穷,-inf表示负无穷
当我们做了一个不合适的计算的时候,如无穷大减去无穷大。
如一个数字除以0,(python会报错,numpy中是一个inf或者-inf)
import numpy as np
a = np.nan
b = np.inf
print(a,b,type(a),type(b))
# -------------output---------------------
# nan、inf都是float
nan inf <class 'float'> <class 'float'>
二,nan的注意点
1,两个nan是不相等的
print(np.nan == np.nan)
print(np.nan != np.nan)
# -------------output---------------------
False
True
2,判断数组中nan的个数的两种方式
import numpy as np
a = np.arange(20).reshape(4,5).astype(float)
a[2,3] = np.nan
print(a)
# np.count_nonzero用来判断数组中非零的个数
# 第一种,利用nan互不相等的特性
print(np.count_nonzero(a!=a))
# 第二种,利用np.isnan()得出数组中为nan得出True
print(np.count_nonzero(np.isnan(a)))
# -------------output---------------------
[[ 0. 1. 2. 3. 4.]
[ 5. 6. 7. 8. 9.]
[10. 11. 12. nan 14.]
[15. 16. 17. 18. 19.]]
1
1
3,nan和任何计算都为nan
import numpy as np
a = np.arange(20).reshape(4,5).astype(float)
a[2,3] = np.nan
b = np.arange(6).reshape(2,3)
print(a)
print(np.sum(a),np.sum(b))
print(np.sum(a,axis=0))
print(np.sum(a,axis=1))
# -------------output---------------------
[[ 0. 1. 2. 3. 4.]
[ 5. 6. 7. 8. 9.]
[10. 11. 12. nan 14.]
[15. 16. 17. 18. 19.]]
nan 15
[30. 34. 38. nan 46.]
[10. 35. nan 85.]
4,Numpy中填充nan为平均数实例
import numpy as np
temp = np.arange(12).reshape(3,4).astype(float)
temp[1,2:] = np.nan
print(temp)
for i in range(temp.shape[1]):
temp_cp = temp[:,i]
num = np.count_nonzero(temp_cp!=temp_cp)
if num:
a = temp_cp[temp_cp==temp_cp]
temp_cp[np.isnan(temp_cp)] = a.mean()
print(temp)
import numpy as np
temp = np.arange(12).reshape(3,4).astype(float)
temp[1,2:] = np.nan
print(temp)
for index in range(temp.shape[1]):
data = temp[:,index]
# if np.any(data!=data):
if np.count_nonzero(np.isnan(data)) :
data[data!=data] = data[data==data].mean()
print(temp)