python:拉格朗日插值

484 阅读1分钟

什么是拉格朗日插值

对一列数据中的空值进行拉格朗日插值 步骤: 1/对于每一个空值,取出其前后各5个数据,如果前后数据中遇到空值,则直接将数据舍去,最后将仅有的数据组成一组。 2/根据取出来的10个数据,然后采用拉格朗日多项式插值公式。 3/拉格朗日插值法代码如下: #-- coding: utf-8 -- """ author: houzhen03@kuaishou.com time: 2019-09-30 doc: 拉格朗日插值代码 """ import pandas as pd from scipy.interpolate import lagrange # 导入拉格朗日插值函数

         input_file = "../data/missing_data.xls"  # 需要进行插值的数据文件
         output_file = "../tmp/missing_data_processed.xls"  # 经过插值处理之后的数据文件
            
         # 读取数据
         data = pd.read_excel(input_file,encoding="utf-8") 
         # 自定义列向量插值函数
         # s是series对象,r为被插值的位置index,k为取前后的数据个数,默认为5,可以修改
         def ployinterp_column(s,r,k=5):
             y = s[ list(range(r-k,r)) + list(range(r+1,r+1+k)) ] # 取缺失值前后各5个数值
             y = y[ y.notnull() ]  # 剔除空值
             return lagrange(y.index,list(y))(r) 
        
         # 逐个遍历,判断元素是否需要插值
         for i in data.columns.tolist():  # 对于每一列
             for j in range(len(data)): # 对于每一列中的每一个数值
                 if (data[i].isnull())[j]: # data[i].isnull()得到的是值为True和False的series对象,针对对象中的每一个值,如果为空即插值:如果(data[i].isnull())[j]是True,则说明该值是空值,需要插值
                     data[i][j] = ployinterp_column(data[i],j)
                     
         data.to_excel(output_file,index=False,encoding="utf-8")