数据挖掘工具numpy(九)Nunpy中的nan和inf

一,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)

猜你喜欢

转载自blog.csdn.net/TFATS/article/details/106275734