Эффективно извлекайте имена листов и имена столбцов из больших .xlsx с помощью Python3

Какие есть параметры Python3 для эффективного (производительность и память) извлечения имен листов и для данного листа, а также имен столбцов из очень большого файла .xlsx?

Я пробовал использовать панды:

Для имен листов с использованием pd.ExcelFile:

    xl = pd.ExcelFile(filename)
    return xl.sheet_names

Для имен столбцов с использованием pd.ExcelFile:

    xl = pd.ExcelFile(filename)
    df = xl.parse(sheetname, nrows=2, **kwargs)
    df.columns

Для имен столбцов с использованием pd.read_excel с nrows и без него (> v23):

    df = pd.read_excel(io=filename, sheet_name=sheetname, nrows=2)
    df.columns

Однако и pd.ExcelFile, и pd.read_excel, кажется, читают весь .xlsx в памяти и поэтому работают медленно.

Большое спасибо!

Нет ничего удобного для тестирования, но как работает dfs = pd.read_excel(filename, sheet_name=None, nrows=0)? Вы должны получить словарь с именами листов в качестве ключей и пустым DataFrame в качестве значений ...

Jon Clements 10.08.2018 11:36
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
3
1
3 998
4

Ответы 4

Согласно этот ТАК вопрос, чтение файлов Excel по частям не поддерживается (см. эту проблему на github), а использование nrows всегда будет сначала читать весь файл в память.

Возможные решения:

  • Преобразуйте лист в CSV и прочтите его по частям.
  • Используйте что-нибудь кроме панд. См. эта страница для списка альтернативных библиотек.

Вот самый простой способ, которым я могу с вами поделиться:

# read the sheet file
import pandas as pd
my_sheets = pd.ExcelFile('sheet_filename.xlsx')
my_sheets.sheet_names

Эта программа выводит список всех листов в Excel. Здесь используются панды.

import pandas as pd
with pd.ExcelFile('yourfile.xlsx') as xlsx :
    sh=xlsx.sheet_names
print("This workbook has the following sheets : ",sh)

Я думаю, это поможет

from openpyxl import load_workbook

workbook = load_workbook(filename, read_only=True)

data = {}   #for storing the value of sheet with their respective columns

for sheet in worksheets:
    for value in sheet.iter_rows(min_row=1, max_row=1, values_only=True):
        data[sheet.title] = value #value would be a tuple with headings of each column

Другие вопросы по теме