Как перебрать список фреймов данных и удалить все данные, если конкретная строка не найдена
Я использую библиотеку 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)
2 ответа
Вы можете использовать оператор 'in' для массива numpy, возвращаемого ссылкой dftemp.values
for t in tables:
dftemp = t.df
#my attempt
if "Unique Value" in dftemp.values:
#append to the list
elist.append(dftemp)
Вы можете сделать это в один ряд:
dfcombined = pd.concat([t.df if "Unique Value" in t.df.values else pd.DataFrame() for t in tables ])