熊猫:排列从html提取的表格

时间:2019-02-07 04:51:41

标签: html pandas datatables

我有许多这样的表,其中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

如何对其进行进一步处理以使其正确排列?还是有另一种方法可以正确地开始阅读它。

1 个答案:

答案 0 :(得分:2)

您的挑战是您面临熊猫read_html的限制。

您尝试解析的表具有定义的“ rowspan = 2”,它会如本issue

中所述抛出read_html

一种解决方法可能是按照here

编写自己的解析器

作者本人的话是:

  

要点这里发生的事情:

     

首先,我们使用BeautifulSoup解析HTML,查找所有表,然后查找每个表中的所有行,然后查找每一行中的每个单元格。   然后,当我们遍历每个单元格时,我们检查一下是否有与该单元格关联的colspan和rowpan属性–这告诉我们该单元格的尺寸。用电子表格的术语来说,您可能会想到rowpanpan值为2,它对应于正在与其下面的单元格合并的单元格。   colspan信息易于使用。如果我们注册的colspan值大于1,我们将在开始填写下一个单元格之前跳过该列数。   行跨度信息有点棘手。如果我们注册的行跨度值大于1,则将其存储在一个列表(“ skip_index”)中,其中每个元素对应于表中的一列。循环为每个单元格填充数据时,首先检查该列的skip_index中是否存在非零值;如果是这样,则跳过此列。在每次行迭代中,我们将每个非零的skip_index元素增加-1,直到其返回零为止。