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: ", data) 8 print("data的列索引: ", 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: " ,x) 28 # 将含有缺失值的行的索引去掉 29 x = x[mask.notnull()] 30 print("x: ", x) 31 # 不管有无缺失值,去除掉其中含有缺失值的部分 32 y = mask[mask.notnull()].values # 含有缺失值的数组 33 print("y: ", y) 34 # 构建拉格朗日多项式, 返回拉格朗日多项式对象 35 la = lagrange(x=x, w=y) 36 # 使用拉格朗日多项式进行插值 37 data.iloc[i, 1] = la([i]) 38 print("插值完成之后的结果: ", data)