Я использую библиотеку Python Camelot для анализа нескольких PDF-файлов и извлечения всех таблиц в этих PDF-файлах.Первая строка кода возвращает все таблицы, которые были извлечены из PDF-файла в виде списка.В частности, я ищу одну таблицу с уникальной строкой.К счастью, эта строка уникальна для этой таблицы, поэтому я теоретически могу использовать ее для выделения таблицы, которую я хочу захватить.
Эти PDF-файлы более или менее созданы в одном и том же формате, однако достаточно дисперсиичто я не могу просто сделать статический вызов на столе, который я хочу.Например, иногда таблица, которую я хочу, будет первой очищенной таблицей, а иногда - третьей.Поэтому мне нужно написать некоторый код, чтобы иметь возможность динамически выбирать таблицу.
Рабочий процесс, который я имею в виду, логически выглядит следующим образом:
Создайте пустой список перед циклом for длядобавить таблицы к.Вызвать цикл for и выполнить итерацию по каждой таблице в списке, выводимом кодом Camelot.Если в таблице нет искомой строки, удалите все данные в этой таблице, а затем добавьте пустой фрейм данных в пустой список.Если в нем есть искомая строка, добавьте ее в пустой список, не удаляя ничего.
Есть ли лучший способ сделать это?Я уверен, что, вероятно, есть.
Я поместил то, что я до сих пор собрал в своем коде.Я изо всех сил пытаюсь собрать условный оператор, чтобы отбросить все строки информационного кадра, если строка присутствует.Я нашел множество примеров удаления столбцов и строк, если строка присутствует, но ничего для всего фрейма данных
import camelot
import pandas as pd
#this creates a list of all the tables that Camelot scrapes from the pdf
tables = camelot.read_pdf('pdffile', flavor ='stream', pages = '1-end')
#empty list to append the tables to
elist = []
for t in tables:
dftemp = t.df
#my attempt at dropping all the value if the unique value isnt found. THIS DOESNT WORK
dftemp[dftemp.values != "Unique Value", dftemp.iloc[0:0]]
#append to the list
elist.append(dftemp)
#combine all the dataframes in the list into one dataframe
dfcombined = pd.concat(elist)