1

我正在使用 tabula-py 从 pdf 文档中提取表格,如下所示:

rows = tabula.read_pdf('bank_statement.pdf', pandas_options={"header":[0, 1, 2, 3, 4, 5]}, pages='all', stream=True, lattice=True) 

rows

这给出了这样的输出:

[                                                   0
 0  Customer Statement\rxxxxxxx\rP...
 1  Print Date: April 12, 2020Address: 41 BAALE ST...
 2  Period: January 1, 2020 ­ April 12, 2020Openin...,
                                                    0
 0  Customer Statement\xxxxxxxx\rP...
 1  Print Date: April 12, 2020Address: 41 gg ST...,
              0          1            2          3          4          5  \
 0  03­Jan­2020          0  03­Jan­2020        NaN  50,000.00  52,064.00   
 1  10­Jan­2020          0  10­Jan­2020  25,000.00        NaN  27,064.00   
 2  10­Jan­2020          0  10­Jan­2020      25.00        NaN  27,039.00   
 3  10­Jan­2020          0  10­Jan­2020       1.25        NaN  27,037.75   
 4  20­Jan­2020  999921...  20­Jan­2020  10,000.00        NaN  17,037.75   
 5  23­Jan­2020  999984...  23­Jan­2020   4,050.00        NaN  12,987.75   
 6  23­Jan­2020          0  23­Jan­2020   1,000.00        NaN  11,987.75   
 7  24­Jan­2020          0  24­Jan­2020   2,000.00        NaN   9,987.75   
 8  24­Jan­2020          0  24­Jan­2020        NaN  30,000.00  39,987.75   

                                                    6  
 0  TRANSFER BETWEEN\rCUSTOMERS Via GG from\r...  
 1  NS Instant Payment Outward\r000013200110121...  
 2  COMMISSION\r0000132001101218050000326...\rNIP ...  
 3     VALUE ADDED TAX VAT ON NIP\rTRANSFER FOR 00001  
 4  CASH WITHDRAWAL FROM\rOTHER ATM ­210674­ ­4420...  
 5  POS/WEB PURCHASE\rTRANSACTION ­845061­\r­80405...  
 6  Airtime Purchase MBANKING­\r101CT0000000001551...  
 7  Airtime Purchase MBANKING­\r101CT0000000001552...  
 8  TRANSFER BETWEEN\rCUSTOMERS\r00001520012412113...  ,

我想从这个 pdf 中得到什么从索引 2 开始。所以我运行

rows[2]

我得到一个看起来像这样的数据框:

在此处输入图像描述

现在,我想要从 2 到最后一个索引的索引。我做了

rows[2:]

但我得到的是一个列表,而不是预期的数据框。

[             0          1            2          3          4          5  \
 0  03­Jan­2020          0  03­Jan­2020        NaN  50,000.00  52,064.00   
 1  10­Jan­2020          0  10­Jan­2020  25,000.00        NaN  27,064.00   
 2  10­Jan­2020          0  10­Jan­2020      25.00        NaN  27,039.00   
 3  10­Jan­2020          0  10­Jan­2020       1.25        NaN  27,037.75   
 4  20­Jan­2020  999921...  20­Jan­2020  10,000.00        NaN  17,037.75   
 5  23­Jan­2020  999984...  23­Jan­2020   4,050.00        NaN  12,987.75   
 6  23­Jan­2020          0  23­Jan­2020   1,000.00        NaN  11,987.75   
 7  24­Jan­2020          0  24­Jan­2020   2,000.00        NaN   9,987.75   
 8  24­Jan­2020          0  24­Jan­2020        NaN  30,000.00  39,987.75   

                                                    6  
 0  TRANSFER BETWEEN\rCUSTOMERS Via gg from\r...  
 1  bi Instant Payment Outward\r000013200110121...  
 2  COMMISSION\r0000132001101218050000326...\rNIP ...  
 3     VALUE ADDED TAX VAT ON NIP\rTRANSFER FOR 00001  
 4  CASH WITHDRAWAL FROM\rOTHER ATM ­210674­ ­4420...  
 5  POS/WEB PURCHASE\rTRANSACTION ­845061­\r­80405...

请问我解决这个问题吗?我需要从 2 开始的索引数据框。

4

2 回答 2

1

您得到这种行为是因为rowsis alist并且切片列表会产生另一个列表。当您访问特定索引处的元素时,您将获得该索引处的对象;在这种情况下,是一个DataFrame对象。

pandas库附带了一个concat函数,该函数可以将多个DataFrame对象组合成一个对象——我相信这就是你想要做的——这样你就有:

import pandas as pd


df_combo = pd.concat([rows[2], rows[3], rows[4], rows[5] ...])

更好的是:

df_combo = pd.concat(rows[2:])
于 2020-04-18T20:03:41.763 回答
0

看看https://medium.com/analytics-vidhya/how-to-extract-multiple-tables-from-a-pdf-through-python-and-tabula-py-6f642a9ee673

实现您想要实现的目标的最佳方法是读取表格并将响应作为 JSON 返回,循环遍历列表的 json 对象。

于 2020-04-18T17:34:52.867 回答