我目前正在使用Pandas来读取Excel文件,并向用户显示其工作表名称,以便用户选择要使用的工作表。问题是,这些文件非常大(70列x 65k行),加载到笔记本上需要14秒(CSV文件中的相同数据需要3秒)。
我在panda中的代码是这样的:
xls = pandas.ExcelFile(path)
sheets = xls.sheet_names
我以前试过xlrd,但得到了类似的结果。这是我用xlrd编写的代码:
xls = xlrd.open_workbook(path)
sheets = xls.sheet_names
那么,谁能提出一种比读取整个文件更快的方法来从Excel文件中检索工作表名称呢?
9条答案
按热度按时间mkh04yzy1#
我试过xlrd,panda,openpyxl和其他类似的库,所有这些库在读取整个文件时,似乎都要花费指数级的时间,因为文件大小会增加。上面提到的其他解决方案,他们使用'on_demand'对我不起作用。下面的函数适用于xlsx文件。
因为所有的xlsx基本上都是压缩文件,所以我们直接从工作簿中提取底层的xml数据并读取工作表名称,与库函数相比,这只需要几分之一秒的时间。
yks3o0rb2#
根据我对标准/流行库的研究,截至2020,
xlsx
/xls
还没有实现这一点,但您可以对xlsb
实现这一点。无论哪种方式,这些解决方案都将为您带来巨大的性能提升。以下是在约10Mb
xlsx
、xlsb
文件上进行的基准测试。一米八一米
一米九一x
xlrd
自2020年起不再维护raogr8fs3#
通过结合@Dhwanil shah的答案和here的答案,我编写的代码也兼容只有一个工作表的xlsx文件:
omjgkv6w4#
基于dhwanil-shah的答案,我发现这是最有效的:
优点是:
待完善:
jutyujz05#
Python代码改编,传递了完整的pathlib路径文件名(例如,('c:\xml\file.xlsx'))。根据Dhwanil shah答案,没有使用Django方法创建临时目录。
cclgggtu6#
仅使用标准库:
41zrol4v7#
读取excel工作表名称的简单方法:
导入openpyxl wb = openpyxl.加载工作簿(r "")打印(wb.工作表名称)
使用Pandas从Excel中的特定工作表读取数据:
pdf = www.example.com_excel(io ='',引擎='openpyxl',工作表名称='报表',页眉= 7,跳过页脚= 1). drop_duplicates()pd.read_excel(io = '', engine='openpyxl', sheet_name = 'Report', header=7, skipfooter=1).drop_duplicates()
flseospp8#
您还可以使用
这里demanddata是你的文件名,oil & gas是你的工作表名之一。假设你的工作表中可能有n个工作表。只需在Sheet_name ="Name of Your required sheet"中给出你想要获取的工作表的名称即可。
9ceoxa929#
您可以使用xlrd库并使用"on_demand = True"标志打开工作簿,这样工作表就不会自动加载。
然后,您可以使用与Pandas类似的方法检索工作表名称: