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'>
任务完成。
你好,我有大约 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'>
任务完成。