Новая версия Pandas использует следующий интерфейс для загрузки файлов Excel:
read_excel('path_to_file.xls', 'Sheet1', index_col=None, na_values=['NA'])
но что если я не знаю доступные листы?
Например, я работаю с файлами Excel, которые следующие листы
Данные 1, Данные 2 ..., Данные N, foo, bar
но я не знаю N
априори.
Есть ли способ получить список листов из документа Excel в Pandas?
ExcelFile
? Также, скажем, я просматриваю список листов и решаю загрузить N из них, должен ли я в этот момент вызыватьread_excel
(новый интерфейс) для каждого листа или придерживатьсяx1.parse
?{sheet_name: xl.parse(sheet_name) for sheet_name in xl.sheet_names}
Вы должны явно указать второй параметр (имя листа) как None. как это:
«df» - это все листы как словарь DataFrames, вы можете проверить это, запустив это:
результат как это:
пожалуйста, обратитесь к документу pandas для получения более подробной информации: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_excel.html
источник
Это самый быстрый способ, который я нашел, вдохновленный ответом @ divingTobi. Все ответы, основанные на xlrd, openpyxl или pandas, медленны для меня, так как все они сначала загружают весь файл.
источник
Основываясь на ответе @dhwanil_shah, вам не нужно извлекать весь файл. С помощью
zf.open
можно читать из заархивированного файла напрямую.Два последовательных
readline
символа безобразны, но содержимое находится только во второй строке текста. Не нужно разбирать весь файл.Это решение кажется намного быстрее, чем
read_excel
версия, и, скорее всего, также быстрее, чем полная версия экстракта.источник
Я пробовал xlrd, pandas, openpyxl и другие подобные библиотеки, и все они, кажется, занимают экспоненциальное время по мере увеличения размера файла, когда он читает весь файл. Другие решения, упомянутые выше, где они использовали on_demand, не работали для меня. Если вы просто хотите получить имена листов изначально, следующая функция работает для файлов xlsx.
Поскольку все xlsx являются в основном заархивированными файлами, мы извлекаем базовые данные xml и читаем имена листов непосредственно из книги, что занимает доли секунды по сравнению с функциями библиотеки.
Бенчмаркинг: (для файла 6 МБ xlsx с 4 листами)
Панды, xlrd: 12 секунд
openpyxl: 24 секунды
Предлагаемый метод: 0,4 секунды
Поскольку моим требованием было просто чтение имен листов, ненужные накладные расходы на чтение все время доставляли мне неприятности, поэтому я выбрал этот путь.
источник
zipfile
который является встроенным модулем иxmltodict
который я использовал для преобразования XML в легко повторяемый словарь. Хотя вы можете посмотреть ответ @ divingTobi ниже, где вы можете прочитать один и тот же файл без фактического извлечения файлов внутри.load_workbook(excel_file).sheetnames
в среднем 8,24 с, где вload_workbook(excel_file, read_only=True).sheetnames
среднем 39,6 мс.Для файла Excel размером 5 МБ, с которым я работаю,
load_workbook
безread_only
флага потребовалось 8,24 с. Сread_only
флагом прошло всего 39,6 мс. Если вы все еще хотите использовать библиотеку Excel и не переходить на решение XML, это намного быстрее, чем методы, которые анализируют весь файл.источник