先上结论,
找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 values
if 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_array
else:
raise Exception ('values too many dims.')
# 主程序入口
if __name__ == '__main__':
# 创建一个浮点数数组,并赋值
v = np.arange(24).astype(float)
# 将数组隔三个数就设置为NaN
v=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)
有其他填充需求可留言喊改。
参考:
二维数组填充