标签:拉格朗 reindex 插值法 list 插值 取数 Python range 空值
由于与作者用的版本不同的问题,这本书里面很多代码方式对模块的新版本不适用了,以下作一些记录与修改。
有关书中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
标签:拉格朗,reindex,插值法,list,插值,取数,Python,range,空值 来源: https://blog.csdn.net/Amanta116/article/details/104425924
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。