Boo*_*d16
5
python
excel
pandas
我有数百个 Excel 文件和数百个表格。
我想使用 python 自动检测这些表并将它们转换为 pandas 数据帧。
关于这些表的一些关键事实:
- 这些表没有命名。
- 这些桌子的位置也是未知的
- 一张表可以有多个表(通常由几个空行分隔)
- 可能有注释
- 表格总是有一组带有值、行和列标签的单元格
- 列标签可能位于 1 行或 2 行(想想 pandas df 中的嵌套标题)
这是表格外观的示例。


这是我提出的解决方案(我希望您对此提出意见):
- 从 Excel 中给定工作表的右下角开始(因此从下到上工作)
- 搜索其中包含值的单元格簇。假设您找到 4 个单元格(上面 2 个,下面 2 个),其中有数字。这表明您已降落在桌子上
- 然后你会算出这个表的尺寸,所以左上角和右下角,这将是 df 的值
- 然后您将计算出列/标题中有多少级别并提取标签
- 然后你会计算出行/索引中有多少层并提取标签
- 然后移至下一张表并重复
使用什么库?
- xlrd:非常快,但不读取 .xlsx 文件的单元格格式。它确实提供 .xls 文件的单元格格式信息,但不提供 .xlsx 的单元格格式信息。我们专注于 .xlsx。
- openpyxl:非常慢,使用大量内存,因为它将所有内容加载到内存中。它确实提供单元格格式信息。
在我的研究过程中,我遇到了这两个问题,它们相似,但提出的解决方案是基于 VBA 的,而我需要一个纯粹的 python 解决方案。
- 如何自动检测Excel中的表格
- 使用机器学习解析Excel文件并提取表数据而不涉及命名表?如果是这样,我该如何开始?