代码源于: Python数据分析与挖掘实战
2015/2/21数据异常+2015/2/14数据缺失,通过拉格朗日插值法填加数据
代码如下:
# -*- coding: utf-8 -*-
import pandas as pd
from scipy.interpolate import lagrange #导入拉格朗日插值函数
inputfile = '../data/catering_sale.xls'
outputfile = './sales.xls'
data = pd.read_excel(inputfile)
#print(data[u'销量']) #取销量列
data[u'销量'][data[u'销量']>5000] = None #过滤异常值,将其变为空值
#自定义列向量插值函数
def ployinterp_column(s, n, k=5): #s为列向量,n为被插值的位置,k为取前后的数据个数,默认为5
y = s[list(range(n-k, n))+list(range(n+1, n+1+k))] #取前5个数与后5个数
y = y[y.notnull()] #剔除空值
return lagrange(y.index, list(y))(n) #插值并返回插值结果
#逐个元素判断是否需要插值
for i in data.columns: #data.columns取列名‘日期’,‘销量’
for j in range(len(data)): #len(data)=201
if(data[i].isnull())[j]: #如果为空即插值
data[i][j] = ployinterp_column(data[i], j)
data.to_excel(outputfile) #输入结果,写入文件
插值后: