Python numpy中的nan和inf,nan替换成对应的均值

nan:not a number

inf:infinity;正无穷

numpy中的nan和inf都是float类型

 

Python numpy中的nan和inf,nan替换成对应的均值_第1张图片

t!=t 返回bool类型的数组(矩阵)

np.count_nonzero() 返回的是数组中的非0元素个数;true的个数。

np.isnan() 返回bool类型的数组。


那么问题来了,在一组数据中单纯的把nan替换为0,合适么?会带来什么样的影响?

比如,全部替换为0后,替换之前的平均值如果大于0,替换之后的均值肯定会变小,所以更一般的方式是把缺失的数值替换为均值(中值)或者是直接删除有缺失值的一行


demo.py(numpy,将数组中的nan替换成对应的均值):

# coding=utf-8
import numpy as np


def fill_ndarray(t1):
    for i in range(t1.shape[1]):  # 遍历每一列(每一列中的nan替换成该列的均值)
        temp_col = t1[:, i]  # 当前的一列
        nan_num = np.count_nonzero(temp_col != temp_col)
        if nan_num != 0:  # 不为0,说明当前这一列中有nan
            temp_not_nan_col = temp_col[temp_col == temp_col]  # 去掉nan的ndarray

            # 选中当前为nan的位置,把值赋值为不为nan的均值
            temp_col[np.isnan(temp_col)] = temp_not_nan_col.mean()  # mean()表示求均值。
    return t1


if __name__ == '__main__':
    t1 = np.array([[ 0.,  1.,  2.,  3.,  4.,  5.],
                 [ 6.,  7., np.nan, np.nan, np.nan, np.nan],
                 [12., 13., 14., 15., 16., 17.],
                 [18., 19., 20., 21., 22., 23.]])

    t1 = fill_ndarray(t1)  # 将nan替换成对应的均值
    print(t1)
    '''
    [[ 0.  1.  2.  3.  4.  5.]
     [ 6.  7. 12. 13. 14. 15.]
     [12. 13. 14. 15. 16. 17.]
     [18. 19. 20. 21. 22. 23.]]
    '''

 

 

你可能感兴趣的:(Python+,Python,numpy,nan)