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

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

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

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
《Python数据分析与挖掘实战》-拉格朗日插值法代码问题

《Python数据分析与挖掘实战》-拉格朗日插值法代码问题《Python数据分析与挖掘实战》-拉格朗日插值法代码问题 蛋蛋的笨笨 发布了1 篇原创文章 · 获赞 0 · 访问量 33 私信 关注
上一篇:LeetCode-最长回文子串


下一篇:ES重建索引(reindex)性能优化建议