Какие есть параметры 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 в памяти и поэтому работают медленно.
Большое спасибо!
Согласно этот ТАК вопрос, чтение файлов Excel по частям не поддерживается (см. эту проблему на github), а использование nrows
всегда будет сначала читать весь файл в память.
Возможные решения:
Вот самый простой способ, которым я могу с вами поделиться:
# 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
Нет ничего удобного для тестирования, но как работает
dfs = pd.read_excel(filename, sheet_name=None, nrows=0)
? Вы должны получить словарь с именами листов в качестве ключей и пустым DataFrame в качестве значений ...