Эффективно анализируйте многоуровневую таблицу из PDF-документа с помощью библиотек Python.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Эффективно анализируйте многоуровневую таблицу из PDF-документа с помощью библиотек Python.

Сообщение Anonymous »

Таблица для анализа
Может ли кто-нибудь посоветовать, как эффективно извлечь эту таблицу (ссылка выше) из PDF-файла? В основном я работаю с таблицами, поскольку это лучшая библиотека Python для идентификации и извлечения таблиц.
Я хотел бы извлечь данные в фрейм данных со структурой ячеек, как показано на изображении ниже:
csv
Я готов заполнить нанс подзаголовками выше/ниже.
Документ («doc») представляет собой годовой отчет Marshalls plc за 2023 год (номер страницы в фактическом документе = 92), доступный по этой ссылке:
https://www.marshalls.co.uk/investor/ результаты-отчеты-и-презентации
Я придумал следующий код для извлечения элементов каждой строки, но он объединяет некоторые элементы, например пятый элемент в строке 1 (начиная с нуля) должен фактически представлять собой два элемента («MIP A» и «MIP B»), а не один («MIP A MIP B»). Как видите, в каждой строке должно быть 19 элементов, включая имя руководителя в первом столбце. Сейчас в каждом из выходных данных кода есть только 10 элементов.
import tabula

dfs = tabula.read_pdf(doc, pages='94') # multiple_tables=True
dfs

row_number = 1 # Row number you want to access (zero-based)

# Iterate over each DataFrame in the list and access a specified row of actual data
for i, df in enumerate(dfs):
if not df.empty: # Ensure DataFrame is not empty
if len(df) > row_number: # Check if DataFrame has enough rows
specified_row = df.iloc[row_number] # Access the specified row of data
print(f"Data from row {row_number + 1} in Table {i+1}:")
print(specified_row.values) # Print only the values from the specified row
print(f"\nNumber of elements in row {row_number + 1} of Table {i+1}: {len(specified_row.values)}")
else:
print(f"Table {i+1} does not contain row {row_number + 1}.")
else:
print(f"Table {i+1} is empty.")

Я должен добавить, что мне нужно иметь возможность применять к другим таблицам и аналогичным образом определять границы между ячейками, поэтому бесполезно иметь конкретные ссылки, подобные следующим:
def split_specific_items(row_values):
updated_values = []
for item in row_values:
if item == 'MIP A MIP B':
updated_values.extend(['MIP A', 'MIP B'])
else:
updated_values.append(item)
return updated_values


Подробнее здесь: https://stackoverflow.com/questions/784 ... -libraries
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»