问题描述
问题陈述:
我正在使用 Tabula App 用户界面从 PDF 文件中选择表格的维度作为 tabula-template 以在 JSON 中给出维度强> 格式。
选择表格维度后提取表格的Tabula App界面中的DataFrame是正确的。
但是,当我使用返回 List 对象的 read_pdf_with_template()
方法时。当我将此列表对象转换为 DataFrame 时,它会合并不同的列。
代码片段:
- 使用
read_pdf_with_template()
方法后。
tables = tabula.read_pdf_with_template(file,"tabula_saved.json")
tables
输出:
[ 0 \
0 01/02/2018
1 01/02/2018
2 01/02/2018
3 01/02/2018
1 \
0 01/02/2018 7777 31-JAN-18M2M Cash Dep Chrgs 202.00
1 01/02/2018 4115 NEFT : 00003- TV 18 HOME 5,52,743.00
2 01/02/2018 4115 NEFT : AXISP1-TECH 25,252.00
3 01/02/2018 1221 To ECS : ECS-TP UIA 911387 66,733.00
2
0 40,233.11
1 5,92,976.11
2 6,18,228.11
3 5,51,495.11
- 尝试使用以下代码转换为 DataFrame 后
df = pd.DataFrame()
df = pd.concat([c for c in tables]).drop_duplicates()
df = df.replace(r'^\s*$',np.nan,regex=True)
df = df[df.isnull().sum(axis=1) < df.shape[1] - 2].reset_index(drop=True)
df
输出:
| 0 | 1 | 2 |
|-------------|-------------------------------------------------------|-------------|
| 01/02/2018 | 01/02/2018 7777 31-JAN-18M2M Cash Dep Chrgs 202.00 | 40,233.11 |
| 01/02/2018 | 01/02/2018 4115 NEFT : 00003- TV 18 HOME 5,743.00 | 5,976.11 |
| 01/02/2018 | 01/02/2018 4115 NEFT : AXISP1-TECH 25,252.00 | 6,228.11 |
| 01/02/2018 | 01/02/2018 1221 To ECS : ECS-TP UIA 911387 66,733.00 | 5,495.11 |
在Tabula App Interface中提取的DataFrame是正确的。
| Txn Date | Value Date | Brn Code | Particulars | Ref No | Debit | Credit | Balance |
|-------------|------------|----------|-----------------------------|--------|-----------|-------------|-------------|
| 01/02/2018 | 01/02/2018 | 7777 | 31-JAN-18M2M Cash Dep Chrgs | | 202.00 | | 40,233.11 |
| 01/02/2018 | 01/02/2018 | 4115 | NEFT : 00003- TV 18 HOME | | | 5,976.11 |
| 01/02/2018 | 01/02/2018 | 4115 | NEFT : AXISP1-TECH | | | 25,252.00 | 6,228.11 |
| 01/02/2018 | 01/02/2018 | 1221 | To ECS : ECS-TP UIA | 911387 | 66,733.00 | | 5,495.11 |
注意:请忽略此问题中的列标题。
解决方法
你想要这个吗?
col_list = ['Value Date','Brn Code','Particulars','Ref No','Debit','Credit']
df['merged'] = df.apply(lambda x: ' '.join(x[col] for col in col_list),axis=1)