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

如何结合Python上下文管理器与pandas.read_excel优化读取性能?

问题根源与解决方案

核心问题:重复读取Excel文件

你这段代码慢到无法运行的根本原因不是没使用上下文管理器,而是循环里的致命错误:

  • 每次循环都调用fetch_excel(1),等于3000次重复打开、读取整个D001_balance.xlsx文件。Excel读取是IO密集型操作,重复3000次必然导致巨量耗时,甚至可能因为文件句柄耗尽直接崩溃。

关于上下文管理器的疑问

pd.read_excel()内部已经封装了文件的打开与关闭逻辑,不需要额外用with语句包裹,就算加了也不会提升性能——你的问题和文件是否及时关闭无关,完全是重复读取导致的。

优化后的代码

只需要读取一次Excel文件,之后循环直接复用内存里的DataFrame即可:

import pandas as pd
import numpy as np

def fetch_excel(x):
    df_x = pd.read_excel(f"D00{x}_balance.xlsx")
    return df_x

# 关键:只读取一次文件,存在变量里
df = fetch_excel(1)
T = np.zeros(3000)

for i in range(0, 3000):
    # 直接用已读取的df,不用重新读文件
    T[i] = df.iloc[i+18, 0]

print(df.iloc[0,0])

进一步优化建议

  • 如果只需要表格里的某一列数据,可以在读取时指定usecols参数,减少内存占用:
    df = pd.read_excel("D001_balance.xlsx", usecols=[0]) # 只读取第0列
    
  • 可以直接把需要的行批量提取,不用循环赋值:
    # 提取第19到3018行的第0列(i+18从18到3017,对应iloc的索引范围)
    T = df.iloc[18:3018, 0].values
    
  • 更换更快的读取引擎:比如用openpyxl(针对xlsx格式),在读取时指定engine="openpyxl",部分场景下能提升读取速度。

内容的提问来源于stack exchange,提问作者In the blind

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 18:30:15