Pandas read_html 相当于一个 lxml table

Pandas read_html equivalent for a lxml table

你好,我有大约 10 个表,我已经使用 lxml 进行了分类。

>>>import pandas as pd
>>>import lxml
>>>root = lxml.etree.HTML(htmlcontent)
>>>tables = root.findall('.//*[@id="info-container"]/table')
>>>readabletables = tables[::2]
>>>len(readabletables) = 5
>>>readabletables[0]
<Element table at 0x105241e60>

我希望 pandas 像 pd.read_html 一样阅读和解释这 5 个表。

我该怎么做?

我现在可以回答我自己的问题了,也许这对其他人有帮助。

由于一些识别问题,我尝试修改 pandas 中的 read_html 源代码但没有成功。尽管如此,答案比您想象的要简单得多。

>>>import pandas as pd
>>>import lxml
>>>root = lxml.etree.HTML(htmlcontent)
>>>tables = root.findall('.//*[@id="info-container"]/table')
>>>readabletables = tables[::2]
>>>len(readabletables) = 5

^ 这是我们已经建立的。

现在为了让 pandas 的 read_html 识别 lxml table,需要将 table 转换为 html。为此,我们执行以下操作:

>>>etree.tostring(readabletables[0],method='html')
'<table... table>'

要将列表中的所有 table 转换为 pandas df:

>>>pd_tables = [pd.read_html(lxml.etree.tostring(table,method='html')) for table in readabletables]
>>>len(pd_tables)
5
>>>type(pd_tables[0])
<class 'pandas.core.frame.DataFrame'>

任务完成。