首页 > 解决方案 > 列重复时如何从字符串写入 pd 数据帧?

问题描述

我用 PDFMiner 阅读了一个 PDF 文件,我得到了一个字符串;遵循该结构:

text
text
text

col1
1
2
3
4
5

col2
(1)
(2)
(3)
(7)
(4)

col3
name1
name2
name3
name4
name5

col4
 name
5
45
7
87
8

col5
FAE
EFD
SDE
FEF
RGE

col6
 name
45
7
54
4
130

# col7
16
18
22
17
25

col8

col9
55
30
60
1
185

col10
name

1
7
1
8

text1
text1
text1

col1
6
7
8
9
10

col2
(1)
(2)
(3)
(7)
(4)

col3
name6
name7
name8
name9
name10

col4
 name
54
4
78
8
86

col5
SDE
FFF
EEF
GFE
JHG

col6
 name
6
65
65
45
78

# col7
16
18
22
17
25

col8

col9
55
30
60
1
185

col10
name

1
4
1
54

我有 10 列命名:col1、col2、col3、col4 名称、col5、col6 名称、# col7、col8、col9、col10 名称。但是因为我每页都有这 10 列;我得到重复的结构。在每一页上,这些名称将始终相同。我不确定如何将它们全部放在同一个数据框中。例如对于 col1 我将在数据框中:

1
2
3
4
5
6
7
8
9
10

我也有一些空列(在我的示例中为 col8),我不知道如何处理它。

任何想法?谢谢!

标签: python-3.xpandaspdf

解决方案


您可以使用正则表达式来解析文档(regex101),例如(txt是问题中的字符串):

import re

d = {}
for col_name, cols in re.findall(r'\n^((?:#\s)?col\d+(?:\n\s*name\n+)?)(.*?)(?=\n\n|^(?:#\s)?col\d+|\Z)', txt, flags=re.M|re.S):
    d.setdefault(col_name.strip(), []).extend(cols.strip().split('\n'))

df = pd.DataFrame.from_dict(d, orient='index').T
print(df)

印刷:

  col1 col2    col3 col4\n name col5 col6\n name # col7  col8 col9 col10\nname
0    1  (1)   name1           5  FAE          45     16         55           1
1    2  (2)   name2          45  EFD           7     18         30           7
2    3  (3)   name3           7  SDE          54     22  None   60           1
3    4  (7)   name4          87  FEF           4     17  None    1           8
4    5  (4)   name5           8  RGE         130     25  None  185           1
5    6  (1)   name6          54  SDE           6     16  None   55           4
6    7  (2)   name7           4  FFF          65     18  None   30           1
7    8  (3)   name8          78  EEF          65     22  None   60          54
8    9  (7)   name9           8  GFE          45     17  None    1        None
9   10  (4)  name10          86  JHG          78     25  None  185        None

推荐阅读