LXML表的Pandas read_html等效项

use*_*113 0 python lxml pandas

嗨,我有大约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>
Run Code Online (Sandbox Code Playgroud)

我希望这5张表像一样被熊猫读取和解释pd.read_html

我将如何去做呢?

use*_*113 6

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

由于某些识别问题,我尝试在熊猫中修改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
Run Code Online (Sandbox Code Playgroud)

^这是我们已经建立的。

现在,为了让熊猫read_html能够识别lxml表,需要将该表转换为html。为此,我们执行以下操作:

>>>etree.tostring(readabletables[0],method='html')
'<table... table>'
Run Code Online (Sandbox Code Playgroud)

要将列表中的所有表转换为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'>
Run Code Online (Sandbox Code Playgroud)

任务完成。