Python用拉格朗日法进行数据横向插值

来源:互联网 发布:淘宝运营月计划书 编辑:程序博客网 时间:2024/06/14 04:08

在工作中,好多数据存在缺失值,对于Excel 中对数据采用列插值,张良均的《Python数据分析与挖掘实战》已有代码,但是我今天遇到数据需要横向插值。

这里写图片描述

import pandas as pd #导入数据分析库Pandasfrom scipy.interpolate import lagrange #导入拉格朗日插值函数name='北京.xlsx'df = pd.read_excel(name, sheetname='小区均价')#lt=['2017-01', '2017-02', '2017-03', '2017-04', '2017-05',#       '2017-06', '2017-07', '2017-08']lt=['2015-12', '2016-01', '2016-02', '2016-03', '2016-04', '2016-05',       '2016-06', '2016-07', '2016-08', '2016-09', '2016-10', '2016-11',       '2016-12', '2017-01', '2017-02', '2017-03', '2017-04', '2017-05',       '2017-06', '2017-07', '2017-08']#自定义列向量插值函数#s为列向量,n为被插值的位置,k为取前后的数据个数,默认为5data=df[lt][0:df.shape[0]]def ployinterp_column(s, n, k=3):  y = s[list(range(n-k, n)) + list(range(n+1, n+1+k))] #取数  y = y[y.notnull()] #剔除空值  if len(y)>k:   return int(lagrange(y.index, list(y))(n)) #插值并返回插值结果#逐个元素判断是否需要插值aa=list(data.columns)for i in range(len(aa)):  for j in range(len(data)):    if (data[aa[i]].isnull())[j]: #如果为空即插值。      pp=pd.Series(list(data.iloc[j:j+1].values.flatten()))      data[aa[i]][j] = ployinterp_column(pp, i)data.to_excel('luoganttcc6.xlsx') #输出结果,写入文件''' dframe = pd.read_excel('c.xlsx', sheetname='小区均价') writer = ExcelWriter('lg.xlsx') data.to_excel(writer,'Sheet2') writer.save()dindex=data.columnsdf[dindex]=data'''dindex=data.columns#提取修改数据的标签df[dindex]=data #将插值修改后的数据赋值给原数据#由于不知何故,将dataframe赋值后,Excel只有一个数据,索性重新copy,pastedfcity = pd.read_excel(name, sheetname='城市均价')dfregion = pd.read_excel(name, sheetname='区域均价')writer = pd.ExcelWriter(name)dfcity.to_excel(writer,'城市均价')dfregion.to_excel(writer,'区域均价')df.to_excel(writer,'小区均价')writer.save()

今天好累啊!!!终于写出来了。。。。

代码链接 提取密码ee1z

原创粉丝点击