本文主要是介绍拉格朗日插值法-Python,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
#利用拉格朗日法进行插补
import pandas as pd #导入数据分析库Pandas
from scipy.interpolate import lagrange #导入拉格朗日插值函数
inputfile = 'G:/py/data/data.xls' #销量数据路径
outputfile = 'G:/py/tmp/data2.xls' #输出数据路径
data = pd.read_excel(inputfile) #读入数据
data.head(15)
日期 | 销量 | |
---|---|---|
0 | 2015-03-01 | 51.0 |
1 | 2015-02-28 | 2618.2 |
2 | 2015-02-27 | 2608.4 |
3 | 2015-02-26 | 2651.9 |
4 | 2015-02-25 | 3442.1 |
5 | 2015-02-24 | 3393.1 |
6 | 2015-02-23 | 3136.6 |
7 | 2015-02-22 | 3744.1 |
8 | 2015-02-20 | 4060.3 |
9 | 2015-02-19 | 3614.7 |
10 | 2015-02-18 | 3295.5 |
11 | 2015-02-16 | 2332.1 |
12 | 2015-02-15 | 2699.3 |
13 | 2015-02-14 | NaN |
14 | 2015-02-13 | 3036.8 |
#自定义列向量插值函数
#s为列向量,n为被插值的位置,k为取前后的数据个数,默认为5
def ployinterp_column(s, n, k=5):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) #插值并返回插值结果
#逐个元素判断是否需要插值
for i in data.columns:for j in range(len(data)):if (data[i].isnull())[j]: #如果为空即插值。data[i][j] = ployinterp_column(data[i], j)
data.to_excel(outputfile) #输出结果,写入文件
data.head(15)
日期 | 销量 | |
---|---|---|
0 | 2015-03-01 | 51.000000 |
1 | 2015-02-28 | 2618.200000 |
2 | 2015-02-27 | 2608.400000 |
3 | 2015-02-26 | 2651.900000 |
4 | 2015-02-25 | 3442.100000 |
5 | 2015-02-24 | 3393.100000 |
6 | 2015-02-23 | 3136.600000 |
7 | 2015-02-22 | 3744.100000 |
8 | 2015-02-20 | 4060.300000 |
9 | 2015-02-19 | 3614.700000 |
10 | 2015-02-18 | 3295.500000 |
11 | 2015-02-16 | 2332.100000 |
12 | 2015-02-15 | 2699.300000 |
13 | 2015-02-14 | 4156.860224 |
14 | 2015-02-13 | 3036.800000 |
#来自:《Python数据分析与挖掘实战》第4章数据预处理
这篇关于拉格朗日插值法-Python的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!