当列表元素是需要解析的文本页面时,如何将列表的每个元素存储在数据框中?

时间:2018-07-24 15:36:08

标签: python list for-loop dataframe split

我有一个包含几个元素的列表。每个元素实质上都是使用OCR和Tesseract将抓取的PDF文件转换为字符串后的页面。

我想将每一页分成几行,然后将所有这些都存储在数据框中。我希望最终结构是“列是页面”和“行是线”。

我知道以下内容将占据一个页面并将每一行存储在一个数据框中。

page1 = pd.DataFrame(final_text[0].splitlines())

我还知道,我可以使用最终文本收录页面,并使用以下内容将它们作为列存储在数据框中:

pages = pd.DataFrame(final_text).T

我的问题有两个:

  1. 如何编写for循环,以对final_text中的所有元素执行上述两项操作?

  2. for循环需要考虑到每个元素或页面将导致不同数量的行。熊猫需要相同数量的行才能附加到数据框。

我尝试了很多方法都没有成功,任何帮助或指导都将不胜感激。

通常沿着这些路线进行实验

for page in pages:
     page.splitlines()

但是这拉动索引值而不是实际元素。出现以下错误:

AttributeError:'int'对象没有属性'splitlines'

1 个答案:

答案 0 :(得分:1)

这就是我最终解决问题的方式。

# Determine the longest page value
page_length = []

for page in final_text:
    page_length.append(len(page.split('\n')))

page_length_max = max(page_length)

# Add blank lines to list entries so they equal the page with max length
updated_text = []

for page in final_text:
    updated_text.append(page.split('\n') + list(((page_length_max - len(page.split('\n'))) * '\n')))

# Create a dataframe with each page a column and each row and line
data = pd.DataFrame()

for i, page in enumerate(updated_text):
     data['page_%s' %str(i+1)] = page