python实现拉格朗日插值法——————基于对python数据挖掘和大数据技术的代码修改

 书上这个地方代码错误了。

书上忽略了nan值在series首个和末尾的设置,现在版本超出的索引值不会设为nan,而是报错。所以需要进行筛选。

 

# 利用拉格朗日插值法填充数据
import pandas as pd
import numpy as np
from scipy.interpolate import lagrange

inputfile = 'data.xlsx'   #自己随便创建了一个文件
df = pd.read_excel(inputfile)
data = df.copy()    #运行报警,就加了个copy

# 自定义列向量插值函数
# s为列向量,n为被插值的位置,k为取前后的数据个数,默认为5
def ployinterp_column(s, n, k=4):
    # 取数
    numlist =[]
    for i in  (list(range(n-k, n)) + list(range(n + 1, n + 1 + k))):   #取出该空值上下k个值
        if i >=0 and i<=int(len(data)-1):   #筛选掉负数和超过索引范围的数,
            numlist.append(i)    #处理的新数加入新列表
    a=s[numlist]   #索引出对应的值
    b = ~np.isnan(s[numlist])   #对值进行布尔判断   
    # 因为值类型是numpy,float64,所以不能用pd.isnull(),要用np.isnan() ,~相当于not的意思
    y = a[b]   #筛掉空值
    # 返回拉格朗日函数结果
    return lagrange(y.index, list(y))(n)    

# 逐个元素判断是否需要插值
for i in data.columns:
    for j in range(len(data)):
        if np.isnan(data[i][j]):
            data[i][j] = ployinterp_column(data[i], j)
 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值