Pandas:排列从html中提取的表格



我有很多这样的表,其中read_html不能正确读取表。例如:

import pandas as pd
l = 'https://www.sec.gov/Archives/edgar/data/1045810/000104581018000047/nvda2018proxystatementsecf.htm'
df_list = pd.read_html(l)
df = df_list[85].dropna(how='all')
df = df.fillna('')
print df

如何对其进行进一步处理以使其正确排列?或者有没有其他方法可以从一开始就正确地阅读它。

您面临的挑战是pandas read_html的限制。

您试图解析的表有一个";rowspan=2〃;定义了抛出read_html的方法,如本期中所述

一个解决方案可能是按照这里描述的编写自己的解析器

用作者自己的话来说:

这里发生的事情的要点:

首先,我们使用BeautifulSoup解析HTML,查找所有表,然后查找每个表中的所有行,然后查找每行中的每个单元格。然后,当我们在这些单元格中的每个单元格上循环时,我们检查是否有任何colspan和rowspan属性与该单元格相关联——这将告诉我们该单元格的维度。在电子表格中,您可能会想到一个行跨度值2,对应于一个正在与其下方单元格合并的单元格。colspan信息易于使用。如果我们注册的colspan值大于1,那么在开始填充下一个单元格之前,我们会跳过该列数。行跨度信息有点棘手。如果我们注册了一个大于1的rowspan值,我们将其存储在一个列表("skip_index")中,其中每个元素都对应于表中的一列。当循环为每个单元格填充数据时,它首先检查该列的skip_index中是否有非零值;如果这是真的,它将跳过这一列。对于每一行迭代,我们将每个非零的skip_index元素增加-1,直到它回到零。

最新更新