【问题标题】:Pandas read_html equivalent for a lxml tablePandas read_html 等效于 lxml 表
【发布时间】:2015-04-26 22:49:20
【问题描述】:

您好,我有大约 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>

我希望这 5 个表能够像 pd.read_html 一样被 pandas 读取和解释。

我该怎么做呢?

【问题讨论】:

标签: python pandas lxml


【解决方案1】:

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

由于一些识别问题,我尝试在 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 表,需要将该表转换为html。为此,我们执行以下操作:

>>>etree.tostring(readabletables[0],method='html')
'<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'>

任务完成。

【讨论】:

    猜你喜欢
    • 2017-01-04
    • 1970-01-01
    • 2022-11-25
    • 2019-08-17
    • 1970-01-01
    • 2019-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多