《Python数据分析与挖掘实战》-拉格朗日插值法代码问题

由于与作者用的版本不同的问题,这本书里面很多代码方式对模块的新版本不适用了,以下作一些记录与修改。

有关书中4-1用拉格朗日法进行插补,会有几处warning和报错,
网上大部分小伙伴都在解决过滤异常值的告警问题,其实真正有问题的是这里:在这里插入图片描述
仅针对课本里出现的问题,正常的索引都是从0开始,但是当n<k的时候,索引就为负的了。老版本时会自动未申明的索引值赋值为none,但是新版本时不好使了,会直接报错。具体可查阅报错信息后的官网链接:
https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#deprecate-loc-reindex-listlike
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述
解决方法:

def ployinterp_column(s, n, k=5):
  if n-k < 0:
    y = s.reindex(range(n-k, len(s)))[list(range(n - k, n)) + list(range(n + 1, n + 1 + k))]  # 取数
  else:
    y = s[list(range(n-k, n)) + list(range(n+1, n+1+k))] #取数
  y = y[y.notnull()] #剔除空值
  return lagrange(y.index, list(y))(n) #插值并返回插值结果

重新运行则会出来正确的结果。但是课本中的数据忽略了另一个问题,当空值出现在末尾,n+k超过了行数,也会报错,最后代码修改为下面这种:

def ployinterp_column(s, n, k=5):
  y = s.reindex(range(n-k, n + 1 + k))[list(range(n - k, n)) + list(range(n + 1, n + 1 + k))]  # 取数
  y = y[y.notnull()] #剔除空值
  return lagrange(y.index, list(y))(n) #插值并返回插值结果

最后插个题外话,最终结果第一行出来是负的了,显然是不合理的,不知道是不是拉格朗日天然的缺陷,旁征博引了网络上的各路小伙伴,其中一位的解答感觉有帮助:
http://blog.sina.com.cn/s/blog_13bb711fd0102x9xl.html
在这里插入图片描述

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值