【数据分析&数据挖掘】拉格朗日插值法

from scipy.interpolate import lagrange
import pandas as pd
import numpy as np

# 加载数据
data = pd.read_excel("./qs.xlsx")
# print("data: \n", data)
print("data的列索引: \n", data.columns)

# 设置使用缺失值前后的n个来进行构建拉格朗日关系
n = 5

# 循环查看缺失值的位置
for i in range(data.shape[0]):
    print(i)
    # 判断如果是缺失值,就进行插值
    if np.isnan(data.iloc[i, 1]):
        print("第%d行为缺失值"%i)
        if i-n < 0:
            start=0
        else:
            start=i-n
        # 获取缺失值的前后n个数据——这前后n个数据是否存在缺失值
        mask = data.iloc[start: i+n+1, 1]
        # 获取index
        x = mask.index
        print("x: \n" ,x)
        # 将含有缺失值的行的索引去掉
        x = x[mask.notnull()]
        print("x: \n", x)
        # 不管有无缺失值,去除掉其中含有缺失值的部分
        y = mask[mask.notnull()].values  # 含有缺失值的数组
        print("y: \n", y)
        # 构建拉格朗日多项式, 返回拉格朗日多项式对象
        la = lagrange(x=x, w=y)
        # 使用拉格朗日多项式进行插值
        data.iloc[i, 1] = la([i])
print("插值完成之后的结果: \n", data)