如何更快更高效的利用pandas读取多个sheet的excel文件?

我们知道pandas的读取excel文件的常规方式是pd.read_excel(file, sheetname),我想很多人都是用这种常规的方式进行读取。

其实,sheetname是可以是数字的,代表每一个sheet的排序编号。

我们用python运行效率分析工具来看一下不同的模式下,他们的执行速度分别是怎么样的?
 

import timeit
import pandas as pd
import time
fpath = r'F:\python_workspace\案例研究\爬虫\保证金监控中心\界面设计2\结算文件\xxxx_2018-07-12.xls'

def read1_1(fpath, num):
    for i in range(num):
        io = pd.io.excel.ExcelFile(fpath)
        data =pd.read_excel(io, sheetname='持仓明细')
        data2 =pd.read_excel(io, sheetname='成交明细')
        data2 =pd.read_excel(io, sheetname='成交明细')
        #data =pd.read_excel(io, sheetname=4)
        io.close()

def read1_2(fpath, num):
    for i in range(num):
        io = pd.io.excel.ExcelFile(fpath)
        #data =pd.read_excel(io, sheetname='持仓明细')
        data =pd.read_excel(io, sheetname=4)
        data2 =pd.read_excel(io, sheetname=2)
        data2 =pd.read_excel(io, sheetname=2)
        io.close()
    
def read2_1(fpath, num):
    for i in range(num):
        #io = pd.io.excel.ExcelFile(fpath)
        data =pd.read_excel(fpath, sheetname='持仓明细')
        data2 =pd.read_excel(fpath, sheetname='成交明细')
        data2 =pd.read_excel(fpath, sheetname='成交明细')
        #data =pd.read_excel(io, sheetname=4)
        #io.close()
        
    
def read2_2(fpath, num):
    for i in range(num):
        data =pd.read_excel(fpath, sheetname=4)
        data =pd.read_excel(fpath, sheetname=2)
        data =pd.read_excel(fpath, sheetname=2)
        

        
@profile
def run(num):
    read1_1(fpath, num)
    read1_2(fpath, num)
    read2_1(fpath, num)
    read2_2(fpath, num)
    
    
run(100)

把上述代码存储为test_pdread.py文件后,在cmd下执行:

kernprof -l -v test_pdread.py

看一下执行结果:

F:\python_workspace\案例研究\爬虫\保证金监控中心\界面设计2>kernprof -l -v test_pdread.py
Wrote profile results to test_pdread.py.lprof
Timer unit: 3.11018e-07 s

Total time: 108.668 s
File: test_pdread.py
Function: run at line 49

Line #      Hits         Time  Per Hit   % Time  Line Contents
==============================================================
    49                                           @profile
    50                                           def run(num):
    51         1     47338937 47338937.0     13.5      read1_1(fpath, num)
    52         1     47416650 47416650.0     13.6      read1_2(fpath, num)
    53         1    127432634 127432634.0     36.5      read2_1(fpath, num)
    54         1    127205921 127205921.0     36.4      read2_2(fpath, num)

很明显,执行速度差了一倍。

首先指向io的方式读取速度会更快一些。

 

 

注意:如果一个excel文件,你仅仅需要读取其中的1个sheet,那么所有的操作耗时是基本一致的。这里高效率是指的多个sheet表单的情况下。

  • 6
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值