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

Chipo ·
更新时间:2024-09-21
· 519 次阅读

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

有关书中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
在这里插入图片描述


作者:蛋蛋的笨笨



插值法 插值 实战 python数据分析 Python

需要 登录 后方可回复, 如果你还没有账号请 注册新账号