如何在Excel中实现类Pandas的简便线性插值操作
使用场景
我需要在Excel中管理远期曲线(价格时间序列):对存在可用报价的日期填入对应数值,其余所有日期的数值通过前后相邻已知值做线性插值填充。需求支持动态调整:当市场出现新报价时可新增为枢轴点;当报价过时失效时可删除对应值,单元格自动还原为插值结果。
参考示例
在Pandas中,仅需调用interpolate()方法即可轻松实现该功能,示例代码如下:
import pandas as pd from numpy import nan df = pd.DataFrame(data = nan, columns=["some_data"], index=pd.date_range("20220101", periods=10)) df.loc['2022-01-01', 'some_data'] = 10 df.loc['2022-01-10', 'some_data'] = 100 print(df) df.interpolate(method='linear', inplace=True) print(df) df.some_data.plot() # 新增2个曲线枢轴点 df.some_data = nan df.loc['2022-01-01', 'some_data'] = 10 df.loc['2022-01-04', 'some_data'] = 25 df.loc['2022-01-08', 'some_data'] = 110 df.loc['2022-01-10', 'some_data'] = 100 print(df) df.interpolate(method='linear', inplace=True) print(df) df.some_data.plot()
新增2个枢轴点后,DataFrame的数值更新结果如下:
初始状态 第一次插值 新增2个枢轴点 第二次插值 1/1/2022 10 10 10 10 1/2/2022 NaN 20 NaN 15 1/3/2022 NaN 30 NaN 20 1/4/2022 NaN 40 25 25 1/5/2022 NaN 50 NaN 46.25 1/6/2022 NaN 60 NaN 67.5 1/7/2022 NaN 70 NaN 88.75 1/8/2022 NaN 80 110 110 1/9/2022 NaN 90 NaN 105 1/10/2022 100 100 100 100

约束与诉求
方案需满足以下前提:
- 避免使用单元格公式,此类方案在生产环境中易引发故障
FORECAST函数仅支持全局回归计算,无法满足分段线性插值需求- 尽量避免采用VBA自定义函数的开发方案
请问Excel中是否存在和Pandas操作同样简便的线性插值实现方案?
实现方案
满足全部约束要求、操作便捷度和Pandas interpolate()接近的方案是使用Excel内置的Power Query(获取和转换)功能,全程无需编写单元格公式、无需开发VBA自定义函数,插值逻辑为严格分段线性,不存在全局回归的偏差。
操作流程
- 整理基础输入区
新建两列表格:第一列为连续的完整日期序列,第二列命名为「报价」,仅在有确定市场报价的日期填入数值作为枢轴点,其余日期留空。选中两列按Ctrl+T转换为超级表,将表命名为CurveSource。 - 加载数据到Power Query
选中超级表,点击顶部菜单栏「数据」选项卡-「从表格/区域」,确认弹出的导入框中勾选「我的表格有标题」,进入Power Query编辑器。 - 配置线性插值逻辑
在编辑器中按以下步骤操作,所有操作均为可视化点选,无需手写复杂代码:- 选中日期列,将数据类型修改为「日期」,按日期做升序排序,确保时间序列顺序正确
- 给表格添加从0开始的连续索引列
- 针对报价列的空值,通过内置的填充逻辑配合索引定位,拿到每个空值前后相邻的两个枢轴点的日期、报价数值
- 新增自定义列,按两点线性公式计算当前日期的插值结果:
前点报价 + (后点报价-前点报价) * (当前日期-前点日期)/(后点日期-前点日期),非空的枢轴点直接保留原有报价 - 清理过程中生成的多余辅助列,仅保留日期、最终插值结果两列
- 输出结果
点击编辑器左上角「关闭并上载」,将计算完成的全量远期曲线结果加载到新工作表中,输出内容全为静态数值,不存在任何单元格公式。
日常维护
后续更新枢轴点时,仅需在CurveSource超级表中录入新的报价、或删除失效的旧报价,右键点击结果表选择「刷新」,全表会自动按最新的枢轴点重新完成线性插值,操作逻辑和Pandas中修改源数据后重新调用interpolate()完全一致。
该方案的核心优势:
- 输出结果全为静态值,不会出现公式被误改、引用错位的生产故障
- 插值逻辑和Pandas线性插值完全一致,严格按相邻枢轴点分段计算,适配远期曲线的业务要求
- 第一次配置完成后无额外开发成本,单次数千行级别的数据刷新耗时不超过1秒,稳定性远高于公式或VBA方案
内容的提问来源于stack exchange,提问作者error404
相关产品推荐
相关产品推荐

