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

 1 from scipy.interpolate import lagrange
 2 import pandas as pd
 3 import numpy as np
 4 
 5 # 加载数据
 6 data = pd.read_excel("./qs.xlsx")
 7 # print("data: \n", data)
 8 print("data的列索引: \n", data.columns)
 9 
10 # 设置使用缺失值前后的n个来进行构建拉格朗日关系
11 n = 5
12 
13 # 循环查看缺失值的位置
14 for i in range(data.shape[0]):
15     print(i)
16     # 判断如果是缺失值,就进行插值
17     if np.isnan(data.iloc[i, 1]):
18         print("第%d行为缺失值"%i)
19         if i-n < 0:
20             start=0
21         else:
22             start=i-n
23         # 获取缺失值的前后n个数据——这前后n个数据是否存在缺失值
24         mask = data.iloc[start: i+n+1, 1]
25         # 获取index
26         x = mask.index
27         print("x: \n" ,x)
28         # 将含有缺失值的行的索引去掉
29         x = x[mask.notnull()]
30         print("x: \n", x)
31         # 不管有无缺失值,去除掉其中含有缺失值的部分
32         y = mask[mask.notnull()].values  # 含有缺失值的数组
33         print("y: \n", y)
34         # 构建拉格朗日多项式, 返回拉格朗日多项式对象
35         la = lagrange(x=x, w=y)
36         # 使用拉格朗日多项式进行插值
37         data.iloc[i, 1] = la([i])
38 print("插值完成之后的结果: \n", data)

猜你喜欢

转载自www.cnblogs.com/Tree0108/p/12116101.html