Pandas read_html相当于一个lxml表

时间:2015-02-25 03:30:06

标签: python pandas lxml

您好我有大约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个表由pandas读取和解释,就像pd.read_html一样。

我将如何做到这一点?

1 个答案:

答案 0 :(得分:4)

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

由于一些识别问题,我尝试修改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'>

完成任务。