Python实现Excel文件拉格朗日插值

实现之前Excel数据缺失情况
Python实现Excel文件拉格朗日插值
实现之后Excel数据插补情况
Python实现Excel文件拉格朗日插值
以下是使用Python实现的代码:

import pandas as pd
from scipy.interpolate import lagrange

inputfile = 'missing_data.xls'
outputfile = 'missing_data_processed.xls'

data = pd.read_excel(inputfile, header=None)  
# 自定义列向量插值函数
# 取出缺失值前后5个数据(前后数据中遇到数据不存在或者为空的,直接将数据舍去,将仅有的数据组成一组)
# 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)  # 插值并返回插值结果


# 逐个元素判断是否需要插值
dict = {}  # 存放需要插值的数据
for i in data.columns:  # 遍历每一列
    for j in range(len(data)):
        if (data[i].isnull())[j]:  # 如果为空即插值
            data[i][j] = ployinterp_column(data[i], j)
            dict[data[i][j]] = 1  # 主要为存取字典中的key值(需插入的值),value=1为随便的取值

# 输出插值结果
writer = pd.ExcelWriter(outputfile, engine='xlsxwriter')  # 获取writer
df = pd.DataFrame(data)  # 格式化数据
df.to_excel(writer, '插值内容', header=False)  # 建立Excel临时文件
# =================== 在这里添加自定义样式的代码 =======================
workbook1 = writer.book  # 取得工作簿
worksheet = writer.sheets['插值内容']  # 设置sheet名称
cell_format = workbook1.add_format()  # 为工作簿添加一个样式
cell_format.set_font_color('red')  # 设置字体颜色
cell_format.set_bold(True)  # 设置字体加粗
for m in data.columns:  # 遍历每一列
    for n in range(len(data)):
        #当前需要写入Excel中的 值
        currentData = data[m][n]
        #判断当前写的值是否在字典表里面,如果不在里面,则表示不是插值
        if currentData not in dict:
            #不是插值,不设置样式
            worksheet.write(n, m + 1, currentData)
        else:
            #是插值,要设置单元格的样式
            worksheet.write(n, m + 1, currentData, cell_format)
            # 第一个参数表示第几行
            # 第二个参数表示第几列
            # 输出时第一列自动添加行序号,so 写入时每列向后移动一列(m+1)

writer.save() #保存文件
writer.close() #关闭