You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python自定义函数循环调用时如何避免重复读取Excel文件?

性能优化方案

你的性能瓶颈来源于循环内重复执行磁盘IO操作(读取Excel),磁盘IO的速度远低于内存读写,只需将Excel读取操作移到循环外执行一次,把数据集存储在内存中,后续所有函数调用直接读取内存中的对象即可解决效率问题。

实现方案

方案1:存储为Pandas DataFrame(适配大多数查询、插值场景)

  1. 程序初始化阶段仅读取一次Excel,存入DataFrame:
import pandas as pd

# 全局仅执行一次
excel_df = pd.read_excel("你的Excel文件路径.xlsx")
# 可提前完成数据清洗,避免后续重复处理
excel_df = excel_df.dropna(subset=["你需要用到的4个变量列名", "目标值列名"]).astype(float)
  1. 改造你的计算函数,直接接收DataFrame作为入参:
def calc_interpolation(var1: float, var2: float, var3: float, var4: float, data: pd.DataFrame):
    # 此处写入你原本的查询、插值逻辑,直接使用传入的data操作,无需再读Excel
    return 计算结果
  1. 循环调用时直接传入已加载好的DataFrame:
result_list = []
for _ in range(1000):
    # 每次获取4个输入变量的实际值
    res = calc_interpolation(v1, v2, v3, v4, excel_df)
    result_list.append(res)

方案2:存储为NumPy数组(适配纯数值插值、对速度要求更高的场景)

如果你的插值逻辑为纯数值运算,可提前将DataFrame转为NumPy数组存储,读写速度更快:

# 初始化阶段执行一次
excel_df = pd.read_excel("你的Excel文件路径.xlsx")
# 提取需要用到的列转为数组,减少冗余数据占用
data_array = excel_df[["变量1列", "变量2列", "变量3列", "变量4列", "目标值列"]].to_numpy()

后续函数直接操作data_array做数值计算即可。

额外优化建议

  • 如果Excel文件体积较大,首次读取耗时久,可在首次读取后将DataFrame序列化为pickle格式存储,后续程序启动直接读取pickle文件,速度比读取Excel快3~10倍:
    # 首次读取Excel后存储缓存文件,仅执行一次
    excel_df.to_pickle("excel_data_cache.pkl")
    # 后续程序启动直接读取缓存
    excel_df = pd.read_pickle("excel_data_cache.pkl")
    
  • 如果存在重复的4个变量输入组合,可给计算函数加functools.lru_cache装饰器做内存缓存,相同参数无需重复计算。

内容的提问来源于stack exchange,提问作者Durlabh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 17:15:01