如何将 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 数据框的主要内容,如果未能解决你的问题,请参考以下文章
如何将 timedelta 转换为 pandas 中的时间?
将 Pandas Dataframe 转换为表记录的嵌套 JSON