您的位置:首页 > 编程语言 > Python开发

数据分析学习-第06课(3-4节)-numpy中的nan和常用方法(有相应课件视频下载链接在文末)--特征工程缺省值补均值

2019-05-21 15:02 459 查看

第3节 numpy中的nan和常用统计方法

1.numpy中的nan/inf

import numpy as np
a = np.nan
b = np.inf
print(type(a))
print(type(b))

<class ‘float’>
<class ‘float’>

2.numpy 中的nan的注意点

import numpy as np
t1 = np.arange(24).reshape(4,6).astype(float)
t2 = t1.clip(3,20)
# print(t1)
t2[3,3] = np.nan
t2[:,0] = 0
print(t2)

[[ 0. 3. 3. 3. 4. 5.]
[ 0. 7. 8. 9. 10. 11.]
[ 0. 13. 14. 15. 16. 17.]
[ 0. 19. 20. nan 20. 20.]]

np.count_nonzero(t2)

20

t2 !=t2

array([[False, False, False, False, False, False],
[False, False, False, False, False, False],
[False, False, False, False, False, False],
[False, False, False, True, False, False]], dtype=bool)

np.isnan(t2)

array([[False, False, False, False, False, False],
[False, False, False, False, False, False],
[False, False, False, False, False, False],
[False, False, False, True, False, False]], dtype=bool)

np.count_nonzero(np.isnan(t2))

1

import numpy as np

t1 = np.arange(24).reshape(4,6).astype(float)
t2 = t1.clip(3,20)
# print(t1)
t2[3,3] = np.nan
print(t2)
print(sum(t2))
print(np.sum(t2))

注意:sum(t2)和 np.sum(t2)的区别,sum(t2)是计算每列相加的结果,如上图;np.sum(t2)是所有的值相加的结果

import numpy as np
t3 = np.array(range(12)).reshape(3,4)
print(t3)
print("列相加:%s"%np.sum(t3,axis=0))
print("行相加:%s"%np.sum(t3,axis=1))

[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
列相加:[12 15 18 21]
行相加:[ 6 22 38]

注意:np.sum(t3,axis=0)其实是行行相加,即第1行+第2行+第3行+第4行
np.sum(t3,axis=1)其实是列列相加,即第1列+第2列+第3列+第4列

3.numpy中常用的统计函数

import numpy as np
t1 = np.arange(24).reshape(4,6).astype(float)
t2 = t1.clip(3,20)
# print(t1)
t2[3,3] = np.nan
t2[:,0] = 0
print(t2)

t2.sum(axis=0)

array([ 0., 42., 45., nan, 50., 53.])

t2.mean(axis=0)

array([ 0. , 10.5 , 11.25, nan, 12.5 , 13.25])

np.median(t2,axis=0)
D:\Program Files\Anaconda3\lib\site-packages\numpy\lib\function_base.py:3578: RuntimeWarning: Invalid value encountered in median for 1 results RuntimeWarning)

array([ 0., 10., 11., nan, 13., 14.])
出现了警告,是nan导致的

t2.max(axis=0)

array([ 0., 19., 20., nan, 20., 20.])----行与行之间的比较,也即求一列的最大值

t2.min(axis=0)

array([ 0., 3., 3., nan, 4., 5.])

np.ptp(t2,axis=0)

array([ 0., 16., 17., nan, 16., 15.])----注意求出的是最大值与最小值的差

第4节 numpy中填充nan和youtube数据的练习

在进行特征工程和数据分析的时候经常需要补缺省值,这里讨论下如何填补nan的值,采用平均值法填补:

import numpy as np

t = np.arange(12).reshape(3,4).astype('float')
t[1,2:] = np.nan
print(2)

for i in range(t.shape[1]):
temp_col = t[:,i]
#找出有nan的列
nan_num = np.count_nonzero(temp_col != temp_col)
if nan_num !=0:
#统计除nan外其他值,并求其均值
temp_non_nan_col = temp_col[temp_col == temp_col]
temp_col[np.isnan(temp_col)] =temp_non_nan_col.mean()
# temp_col[temp_col != temp_col] = temp_not_nan_col.mean()
print(temp_col)
print(t)

总结:

链接:https://pan.baidu.com/s/1d-_QhcV8ZyTnayDigBpT7A
提取码:0vbq
复制这段内容后打开百度网盘手机App,操作更方便哦

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐