用拉格朗日法進行數據插補
代碼如下
# coding=utf-8
import pandas as pd
from scipy.interpolate import lagrange
inputfile = 'data/catering_sale.xls'
outputfile = 'data/sales.xls'
data = pd.read_excel(inputfile)
# 過濾異常值,將值變爲None
data[u'銷量'][(data[u'銷量'] < 400 )| (data[u'銷量'] > 5000)] = None
# 自定義列向量插值函數
# s爲列向量,n爲被插值的位置,k爲取前後的數據個數,默認爲5
def ployinterp_column(s, n, k=5):
y = s[list(range(n - k, n) + list(range(n + 1, n + 1 + k)))]
y = y[y.notnull()] # 剔除空值
return lagrange(y.index, list(y))(n)
for i in data.columns:
for j in range(len(data)):
print data[i][j]
if (data[i].isnull())[j]:
data[i][j] = ployinterp_column(data[i], j)
data.to_excel(outputfile)
插入之前的數據
插入之後的數據
感覺有bug 直接將3.1號的數據變爲-291.4了,可能是第一條數據沒有前五條數據造成的。