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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章