如何将 html 表转换为 pandas 数据框

Posted

技术标签:

【中文标题】如何将 html 表转换为 pandas 数据框【英文标题】:How to convert a html table into pandas dataframe 【发布时间】:2013-04-07 05:57:56 【问题描述】:

pandas 提供了一个有用的to_html()DataFrame 转换为html table。有什么有用的功能可以读回DataFrame吗?

【问题讨论】:

我认为不会,但在lxml 的帮助下应该不会太难... 另外,到html 的转换是有损的,因为类型信息丢失了,所以您需要自己指定。无论如何,如果df 相对简单(例如统一数据类型),转换应该只需要几行代码。 pandas 有一些类型推断方法试图缓解这个问题,它们做得很好。 【参考方案1】:

pandas 0.12 中发布的read_html 实用程序

【讨论】:

【参考方案2】:

在一般情况下这是不可能的,但如果您大致了解表格的结构,您可以这样做:

# Create a test df:
>>> df = DataFrame(np.random.rand(4,5), columns = list('abcde'))
>>> df
     a           b           c           d           e
0    0.675006    0.230464    0.386991    0.422778    0.657711
1    0.250519    0.184570    0.470301    0.811388    0.762004
2    0.363777    0.715686    0.272506    0.124069    0.045023
3    0.657702    0.783069    0.473232    0.592722    0.855030

现在解析 html 并重构:

from pyquery import PyQuery as pq

d = pq(df.to_html())
columns = d('thead tr').eq(0).text().split()
n_rows = len(d('tbody tr'))
values = np.array(d('tbody tr td').text().split(), dtype=float).reshape(n_rows, len(columns))
>>> DataFrame(values, columns=columns)

     a           b           c           d           e
0    0.675006    0.230464    0.386991    0.422778    0.657711
1    0.250519    0.184570    0.470301    0.811388    0.762004
2    0.363777    0.715686    0.272506    0.124069    0.045023
3    0.657702    0.783069    0.473232    0.592722    0.855030

如果需要,您可以使用 eval() 将其扩展为 Multiindex dfs 或自动类型检测。

【讨论】:

以上是关于如何将 html 表转换为 pandas 数据框的主要内容,如果未能解决你的问题,请参考以下文章

pandas 数据框的颜色行并转换为 HTML 表

如何将 timedelta 转换为 pandas 中的时间?

如何将包含布尔列的 pandas df 转换为热图兼容表?

将 Pandas Dataframe 转换为表记录的嵌套 JSON

将 Microsoft Access 表转换为 CSV 和/或 Pandas

如何将熊猫数据透视表转换为 JSON [重复]