除了语法之外没有什么特别的区别。从技术上来说,ExcelFile
是一个类并且read_excel
是一个函数。在任何一种情况下,实际的解析都是由_parse_excel
内定义的方法ExcelFile
.
在 pandas 的早期版本中,read_excel https://github.com/pandas-dev/pandas/blob/v0.12.0/pandas/io/excel.py#L16完全由一条语句组成(注释除外):
return ExcelFile(path_or_buf,kind=kind).parse(sheetname=sheetname,
kind=kind, **kwds)
And ExcelFile.parse https://github.com/pandas-dev/pandas/blob/v0.12.0/pandas/io/excel.py#L81除了打电话之外没有做太多事情ExcelFile._parse_excel
.
在最新版本的 pandas 中,read_excel https://github.com/pandas-dev/pandas/blob/v0.22.0/pandas/io/excel.py#L213确保它有一个ExcelFile
对象(如果没有则创建一个),然后调用_parse_excel
直接方法:
if not isinstance(io, ExcelFile):
io = ExcelFile(io, engine=engine)
return io._parse_excel(...)
并通过更新(和统一)的参数处理,ExcelFile.parse https://github.com/pandas-dev/pandas/blob/v0.22.0/pandas/io/excel.py#L302实际上只是一个声明:
return self._parse_excel(...)
这就是为什么文档ExcelFile.parse
now say
Equivalent to read_excel(ExcelFile, ...) See the read_excel docstring for more info on accepted parameters
As for 另一个答案 https://stackoverflow.com/a/38560203/95852其中声称ExcelFile.parse
循环速度更快,这实际上取决于您是否正在创建ExcelFile
每次都从头开始对象。您当然可以创建您的ExcelFile
一次,在循环外,然后通过that to read_excel
在你的循环内:
xl = pd.ExcelFile(path)
for name in xl.sheet_names:
df = pd.read_excel(xl, name)
这相当于
xl = pd.ExcelFile(path)
for name in xl.sheet_names:
df = xl.parse(name)
如果你的循环涉及不同的paths(换句话说,您正在阅读许多不同的工作簿,而不仅仅是一个工作簿中的多张工作表),那么您就无法避免必须创建一个全新的工作簿ExcelFile
无论如何,每个路径都有一个实例,然后再一次,两个ExcelFile.parse
and read_excel
将是等效的(并且同样慢)。