我有许多这样的表,其中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
如何对其进行进一步处理以使其正确排列?还是有另一种方法可以正确地开始阅读它。
答案 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,直到其返回零为止。