您好我有大约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
一样。
我将如何做到这一点?
答案 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'>
完成任务。