Проблема при импорте таблицы из pdf в python с использованием tabula

#python-3.x #tabula

#python-3.x #tabula

Вопрос:

При импорте данных из pdf с использованием tabula на Python в некоторых случаях я получаю два или более столбца, объединенных в один. Это происходит не со всеми файлами, полученными из одного и того же pdf.

В данном случае это код, используемый для чтения pdf:

 from tabula import wrapper

tables = wrapper.read_pdf("933884 cco Saupa 1.pdf",multiple_tables=True,pages='all')

i=1

for table in tables:

    table.to_excel('output' str(i) '.xlsx',index=False)

    i=i 1
  

Например, когда я печатаю первый элемент фрейма данных, полученный из одного из этих файлов Excel, с именем «output_pd»:

 print (output_pd[0][1])
  

Я получаю:

 76) 858000015903708 77) 858000013641969 78)
  

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

Ответ №1:

Вы могли бы попробовать вручную отредактировать данные в Excel. Если вы используете text to columns на вкладке data в Excel, это позволяет вам разбить один столбец на несколько без особых усилий, но вам нужно будет делать это для каждого файла Excel, что может быть затруднительно.

Комментарии:

1. Я также пробовал конвертировать pdf в Excel, прежде чем использовать его с Python. Но в нем также есть некоторое ручное редактирование, которого я пытаюсь избежать.

2. Вы пробовали другой метод извлечения в tabula? Это могло бы дать лучшие результаты. Кроме этого, у меня действительно ничего нет для вас. Год назад мне пришлось использовать tabula для 35-ти огромных файлов Excel, и мне пришлось выполнить тонну ручного редактирования в Excel, что было не весело

Ответ №2:

Итерация по каждому элементу каждого столбца каждого фрейма данных в списке, полученном с помощью tabula

 wrapper.read_pdf(file)
  

в этом случае

 tables
  

можно получить чистые данные.
В этом случае:

 prueba =[]
i = 0
for table in tables:    
    for columna in table.columns:        
        for item in (str(table[columna]).split(" ")):            
            if "858" in str(item):
                prueba.append(item[0:15]) 
print (prueba[0:5])
  

результат в:

 ['858000019596025', '858000015903707', '858000013641975', '858000000610864', '858000013428853']
  

Но

 tabula.wrapper.read_pdf
  

не считывает весь исходный PDF. на последней странице оставлено 2 значения. Итак, все еще необходимо вручную внести небольшую правку.