Ответ 1
Там нет особой разницы, кроме синтаксиса. Технически ExcelFile
- это класс, а read_excel
- это функция. В любом случае фактический анализ обрабатывается методом _parse_excel
определенным в ExcelFile
.
В более ранних версиях панд read_excel
полностью состоял из одного утверждения (кроме комментариев):
return ExcelFile(path_or_buf,kind=kind).parse(sheetname=sheetname,
kind=kind, **kwds)
И ExcelFile.parse
не сделал намного больше, чем вызов ExcelFile._parse_excel
.
В последних версиях pandas read_excel
гарантирует, что у него есть объект ExcelFile
(и создает его, если его нет), а затем напрямую _parse_excel
метод _parse_excel
:
if not isinstance(io, ExcelFile):
io = ExcelFile(io, engine=engine)
return io._parse_excel(...)
и с обновленной (и унифицированной) обработкой параметров ExcelFile.parse
действительно является единственным утверждением:
return self._parse_excel(...)
Вот почему документы для ExcelFile.parse
теперь говорят
Эквивалент read_excel (ExcelFile,...). См. Строку документации read_excel для получения дополнительной информации о принятых параметрах.
Что касается другого ответа, в котором утверждается, что ExcelFile.parse
быстрее в цикле, то на самом деле все сводится к тому, создаете ли вы объект ExcelFile
с нуля каждый раз. Конечно, вы можете создать свой ExcelFile
один раз вне цикла и передать его в 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)
Если ваш цикл включает в себя разные пути (другими словами, вы читаете много разных книг, а не просто несколько листов в одной книге), то вы все равно не сможете обойтись без создания нового экземпляра ExcelFile
для каждого пути, и затем еще раз, и ExcelFile.parse
и read_excel
будут эквивалентны (и одинаково медленно).