Я написал скрипт Python для чтения строк в ячейке Excel и разделения их в книгах
Проблема в том, что в одном из скриптов метки строк находятся в строке 3, первые 2 строки состоят из объединенных ячеек, 1-я строка используется как метка для кадра данных.
Я хочу, чтобы первые две строки игнорировались и читались только строка 3 и ниже, но цель состоит в том, чтобы сделать это динамическим для других случаев, подобных этому, когда верхние ячейки объединяются.
def read_excel_file(file_buffer):
# Load the Excel file using openpyxl
wb = load_workbook(file_buffer, data_only=True)
# Get a list of all workbook names
workbook_names = wb.sheetnames
workbooks = {}
# Iterate over each workbook
for workbook_name in workbook_names:
# Read the workbook into a pandas DataFrame
workbook_df = pd.read_excel(file_buffer, sheet_name=workbook_name)
# Add the workbook to the dictionary
workbooks[workbook_name] = workbook_df
# Return the dictionary of workbooks
return workbooks
Почему бы просто не прочитать это с помощью openpyxl. Вы начали его использовать, так что продолжайте идти по этому пути. Должно быть достаточно быстро и, возможно, быстрее. Плюс у вас больше контроля
ws.iter_rows(min_row=3)
Кажется, вы хотите проверить, какие строки содержат объединенные ячейки, а затем пропустить эти строки.
Вы можете проверить строки, существующие в объединенных ячейках, найдя максимальную строку в списке, а затем пропустить строки до этой строки в read_excel.
import pandas as pd
from openpyxl import load_workbook
file_buffer = "merged.xlsx"
workbook_name = 'Sheet1'
wb = load_workbook(file_buffer)
ws = wb[workbook_name]
### Get the max row that exists in the merged cells list
max_merged_row = max([merge.max_row for merge in ws.merged_cells])
print(max_merged_row)
### Create Dataframe skipping the rows that have merged cells
workbook_df = pd.read_excel(file_buffer, sheet_name=workbook_name, skiprows=max_merged_row)
Добавьте небольшой пример того, как выглядят данные на одном из листов + ожидаемый результат (
workbook_df
) на основе этого примера.