Есть ограничения на pd.read_excel. Когда у нас есть сложный лист Excel, содержащий несколько таблиц, pd.read_excel начинает вести себя странно. Например, допустим, у нас есть вот этот лист Excel.

import pandas as pd
print(pd.read_excel('Book1.xlsx'))

^ если мы используем pd.read_excel, мы получаем этот огромный странный фрейм данных. Но что, если мы хотим извлечь 3 отдельные таблицы сами по себе?

Идея — извлечение отдельных таблиц

В каждой таблице есть:

  • Верхняя левая ячейка
  • заданное количество столбцов
  • заданное количество строк

Таким образом, мы можем написать код для извлечения этих 3 таблиц по отдельности, учитывая вышеприведенные данные для каждой таблицы.

Базовый openpyxl для чтения файла Excel

Во-первых, pip install openpyxl в вашем cmd/терминале.

from openpyxl import load_workbook

# load path to excel file
workbook = load_workbook('Book1.xlsx')

# select your excel sheet
sheet1 = workbook['Sheet1']

print(sheet1['B2'].value)    # Fruit

Чтобы прочитать значение ячейки, нам просто нужно передать координаты.

Код для извлечения отдельных таблиц

from string import ascii_uppercase
from itertools import pairwise
from openpyxl import load_workbook
import pandas as pd

def get_next_code(code):
    '''
    returns next column letter given existing one
    input: 'AA', output: 'AB'
    input: 'AB', output: 'AC'
    '''
    letter_map = {a:b for a,b in pairwise(ascii_uppercase)}
    code = list(code)
    i = -1
    while True:
        if code[i] == 'Z':
            code[i] = 'A'
            i -= 1
            if abs(i) > len(code):
                return 'A' + ''.join(code)
        else:
            code[i] = letter_map[code[i]]
            return ''.join(code)
        
def…