关于numpy的nan值处理

numpy的nan值处理没有一个可以直接调用的方法,我们可以自己编写相应的函数,通过调用函数把nan值填充为均值、中位数、众数等等

NumPy是Python语言的一个扩充程序库。作为一个强大的数据分析工具,掌握numpy包可以助你快速处理支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库,得益于numpy的数组运算效率,也是大量机器学习框架的基础库!

  • numpy 中的nan为not a number,表示一个不确定的数,所以两个nan是不相等的
import numpy as np
np.nan == np.nan
>> False
  • numpy 中的count_nonzero()方法是求一个数组中非零元素的个数
t = np.array([1,2,3,4]).astype("float")
t
>> array([1., 2., 3., 4.])
t
>> array([ 1.,  2.,  3., nan])
t[3] = np.nan
np.count_nonzero(t == t)
>> 3
  • numpy还有一个判断数组元素是否为nan是方法isnan(),返回一个bool类型的数组
np.isnan(t)
>> array([False, False, False,  True])
  • 所以我们可以利用上述性质通过bool索引找出一个数组中非nan的其他元素
"""
输入:一个含部分nan值的数组
输出:nan所在列中其他非nan值的均值填充nan所在位置的数组 
"""
import numpy as np

def fill_ndarray(t1):             # 定义一个函数,把数组中为零的元素替换为一列的均值
    for i in range(t1.shape[1]):
        temp_col = t1[:,i]               # 取出当前列
        nan_num = np.count_nonzero(temp_col != temp_col)    # 判断当前列中是否含nan值
        if nan_num != 0:
            temp_not_nan_col = temp_col[temp_col == temp_col]            
            temp_col[np.isnan(temp_col)] = temp_not_nan_col.mean()    # 用其余元素的均值填充nan所在位置
    return t1

if __name__ == "__main__":
    t1 = np.arange(12).reshape((3,4)).astype("float")
    t1[1,2:] = np.nan
    print(t1)
    t2 = fill_ndarray(t1)
    print(t2)


>> [[ 0.  1.  2.  3.]
    [ 4.  5. nan nan]
    [ 8.  9. 10. 11.]]
   [[ 0.  1.  2.  3.]
    [ 4.  5.  6.  7.]
    [ 8.  9. 10. 11.]]

你可能感兴趣的:(数据分析包,numpy,pandas,matplotlib)