用拉格朗日法進行數據插補

用拉格朗日法進行數據插補

代碼如下

# 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了,可能是第一條數據沒有前五條數據造成的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章