ndarray中nan的替换(均值)
ndarray中存在nan,如何操作才能够将nan替换为每一列的均值?
# 判断这一列中是否有nan数据
for i in range(arr.shape[1]): # 对列进行遍历
current_col=arr[:,i] # 当前的这一列
# 判断当前的这一列中是否有nan数据 如果有 有几个
nan_num=np.count_nonzero(current_col!=current_col) # 这一列中nan数据的个数
if nan_num!=0: # 说明这一列数据中有nan数据
not_nan_array=current_col[current_col==current_col] # 取出这一列中不为nan的数据 返回的是一个数组
# 求出这一列中不为nan的数据构成的数组的均值 arr.mean()
# 用这一列的均值来替换这一列的nan数据
# 取出这一列的nan数据
# current_col[current_col!=current_col]
# current_col[np.isnan(current_col)]
# np.isnan(arr) 将数组中的nan数据标记为True 否则标记为False
current_col[np.isnan(current_col)]=not_nan_array.mean() # 赋值
由于 使用这一列的均值来填充这一列的缺失值数据
是一种很常用的方法,所以我们可以将这个方法定义为一个函数,以后需要使用的时候直接调用这个函数就可以了
简单看一下效果怎么样
先创造一个含有缺失值的数组对象
然后再调用这个函数
结果是正确的,我们可以看见,最后返回的数组对象中,它的缺失值部分的确是用这一列的均值来代替了。
这是完整的代码
# -*- coding: utf-8 -*-
'''
@Time : 2020/12/05 19:49
@Author : yuhui
@Email : 3476237164@qq.com
@FileName: numpy_2.py
@Software: PyCharm
'''
"""19【numpy中的nan和常用方法】01numpy中的nan和常用统计方法"""
import numpy as np
def fill_array_nan(arr):
"""
:param arr: 含有nan缺失值的数组对象
:return: 用这一列的平均值来替换这一列的缺失值
"""
# 对这个数组进行列遍历
for i in range(arr.shape[1]):
current_col=arr[:,i] # 取出当前正在被遍历的一列
# 检查当前的这一列中是否存在nan缺失值 如果有 有几个
nan_array = current_col[current_col != current_col] # 这一列中缺失值的数组
if nan_array is not None: # 数组不为空 说明存在缺失值
not_nan_array = current_col[current_col == current_col] # 这一列中不为nan的数据
# 用正常值的均值来替换这一列的缺失值数据
# current_col[current_col!=current_