python-3.x - 列重复时如何从字符串写入 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),我不知道如何处理它。
任何想法?谢谢!
解决方案
您可以使用正则表达式来解析文档(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
推荐阅读
- django - django PostgreSQL arrayfield 存储一个 3 维数组
- java - 将 struts 从 2.5.16 升级到 2.5.26 时出现 404 未找到错误
- excel - 如何在 Format() 中强制日期分隔符为“/”?
- javascript - JQuery 事件按钮模拟点击
- python - 用向量化替换两个复杂的 for 循环
- html - 从同一个网站,我可以从一个页面类别中刮一张带有美丽汤的表格,但不能从另一个页面类别中刮取一张桌子,尽管 html 是相同的
- javascript - 如何在 Chart.js 上使用 Jitter 在 Boxplot 上显示单个数据点
- swift - SwiftUI View Modifier .ignoresSafeArea(.keyboard) 未按预期工作
- php - 如何在 Laravel 中记录学生成绩?
- session - 无法覆盖 Koa/next.js 中的会话