numpy处理nan

import numpy as np

np.random.seed(10)
# a = np.random.randint(10, 20, (4, 5))
# a = a.astype(float)
# a[:, 1] = 0
# a[2, 2] = np.nan
# # 判断非0 的个数:
# print(np.count_nonzero(a))
# # 判断nana的个数:
# print(np.count_nonzero(a != a))
# # 或者是
# print(np.count_nonzero(np.isnan(a)))
# # nan做任何运算的是都是nan
# print(a)
# print(np.sum(a, axis=0, keepdims=True))
#
# # 将nan赋值成0
# a[a != a] = 0
# print(a)
#
# # 取中值np.median(a,axis=0)
# print(np.median(a, axis=0))
#
# # 取极差np.ptp(a,axis=0)
#
# # 取标准差array.std()
#
#
# # 将nan用均值替换
#
# print(a)
#
# a[2, 3] = np.nan
#

def fill_ndarray_row(a):
    for row in a:
        nan_num = np.count_nonzero(row != row)
        # 如果有nan用均值替代
        if nan_num != 0:
            print('含nan的行\n', row)
            row_mean = (row[row == row]).mean()
            row[row != row] = row_mean
    return a


def fill_ndarray_col(a):
    for i in range(a.shape[1]):
        col=a[:,i]
        nan_num = np.count_nonzero(col != col)
        # 如果有nan用均值替代
        if nan_num != 0:
            print('含nan的列\n', col)
            col_mean = (col[col == col]).mean()
            col[col != col] = col_mean
    return a

if __name__ == '__main__':
    a=np.arange(12).reshape(3,4).astype('float')
    a[1:,2]=np.nan
    print('处理前的a\n', a)
    a2=fill_ndarray_row(a)
    print('处理后的a\n', a2)

    b=np.arange(12).reshape(3,4).astype('float')
    b[1,2:]=np.nan
    print('处理前的b\n', b)
    b2=fill_ndarray_col(b)
    print('处理后的b\n', b2)

发布了58 篇原创文章 · 获赞 26 · 访问量 3548

猜你喜欢

转载自blog.csdn.net/qq_44099721/article/details/104056214
NaN