先上结论,
找np.nan填充的没有现场方法可以调用。
于是手写了一个一维数组的nan填充方法,可以直接拿去使用。
填充方法
平均数填充,
最大最小值填充~~(奇奇怪怪)~~ ,
还有用0填充。
import numpy as np# 定义函数fill1Dnan,用于填充一维NumPy数组中的NaN值
def fill1Dnan(values,method='mean'):'''values:需填充的一维数组.method:填充方式.默认用均值填充。'mean':非NAN的均值填充'max': 最大值填充'min': 最小值填充'zero': 用0填充。'''if not isinstance(values,numpy.ndarray):values=numpy.array(values)if values.ndim==1:new_array=np.array([ x for x in values if not np.isnan(x) ])if len(new_array)==0:return valuesif len(new_array)==len(values):return np.array([])if method=='mean':fillvalue=np.mean(new_array)result_array=np.array([fillvalue if np.isnan(x) else x for x in values ])elif method =='max':fillvalue=np.max(new_array)result_array=np.array([fillvalue if np.isnan(x) else x for x in values ])elif method=='min':fillvalue=np.min(new_array)result_array=np.array([fillvalue if np.isnan(x) else x for x in values ])elif method=='zero':result_array=np.array([0 for x in values if np.isnan(x)])else:raise Exception (method,' method is not support !')return result_arrayelse:raise Exception ('values too many dims.')# 主程序入口
if __name__ == '__main__':# 创建一个浮点数数组,并赋值v = np.arange(24).astype(float)# 将数组隔三个数就设置为NaNv=np.array([np.nan if i %4 ==0 else v[i] for i in range(24)])# 打印原始数组print(v)# 定义填充方法method='mean'# 调用填充函数res = fill1Dnan(v,method)# 打印填充后的数组print(res)
有其他填充需求可留言喊改。
参考:
二维数组填充