Python基于滑动平均思想实现缺失数据填充的方法
本文介绍了一种基于滑动平均思想的Python数据填充方法,旨在解决时序数据中因非NaN值(如AQI中的0)导致的缺失问题。通过对比简单零值处理与滑动窗口平均算法,展示了如何在保留数据量的同时有效填充缺失值,为模型分析提供高质量数据支持。
在时序数据的处理环节中,受现实因素干扰,数据缺失现象屡见不鲜。这种缺失不仅限于标准的‘NaN’值,例如在空气质量指数(AQI)数据中,数值0代表不可能存在的情况,此时若出现0即视为数据缺失。近期在进行污染物模型分析时,便遭遇了此类数据缺失挑战。鉴于原始数据量有限,若直接丢弃缺失值将导致样本进一步缩减,因此本文探讨采用数据填充策略来解决这一问题。文中提供了两个版本的实现方案,其中第一个版本逻辑较为简单,主要为了直观展示基础效果,具体代码实现如下:
#!usr/bin/env python
#encoding:utf-8
from __future__ import division
'''
__Author__:沂水寒城
功能: python 基于滑动平均思想实现简易的缺失数据填充
'''
def zeroDataFill(one_all_list):
'''
对于0数据处理,简单实现版本,可忽略
'''
res_list=[]
for i in range(len(one_all_list)):
if one_all_list[i]!=0:
res_list.append(one_all_list[i])
else:
if i==0:
for j in range(1,len(one_all_list)):
if one_all_list[j]!=0:
res_list.append(one_all_list[j])
break
elif i==len(one_all_list)-1:
res_list.append(int(sum(res_list[-3:-1])/2))
else:
tmp=0
for j in range(i,len(one_all_list)):
if one_all_list[j]!=0:
tmp=one_all_list[j]
break
now=(res_list[i-1]+tmp)/2
res_list.append(int(now))
print res_list
return res_list
def dataProcessing(one_all_list,num=7):
'''
对于时间序列数据中的 0 进行处理,采用滑动平均的方法来填充(默认时间为一周)
'''
nozero_list=[one for one in one_all_list if one!=0]
before_avg,last_avg=sum(nozero_list[:num])/num,sum(nozero_list[-1*num:])/num
res_list=[]
for i in range(len(one_all_list)):
if one_all_list[i]!=0:
res_list.append(one_all_list[i])
else:
tmp=int(num/2)+1
if i<=tmp:
res_list.append(int(before_avg))
elif i>=len(one_all_list)-tmp:
res_list.append(int(last_avg))
slice_list=one_all_list[i-tmp:i+tmp+1]
res_list.append(int(sum(slice_list)/(num-1)))
print res_list
return res_list
if __name__=='__main__':
one_all_list=[0,12,3,5,1,5,7,8,4,0,12,14,0,0,45,34,67,43,0,9,1,0]
zeroDataFill(one_all_list)
dataProcessing(one_all_list,num=7)
运行结果展示如下:
[12, 12, 3, 5, 1, 5, 7, 8, 4, 8, 12, 14, 29, 37, 45, 34, 67, 43, 26, 9, 1, 17] [5, 12, 3, 5, 1, 5, 7, 8, 4, 12, 14, 45, 34, 67, 43, 30, 33, 9, 1, 30, 8]
总结
以上内容为本文的全部介绍,期望这些内容能对各位的学习或工作提供一定的参考价值,感谢大家的支持。如需获取更多相关信息,请参阅下方的相关链接。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









