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

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

【问题讨论】:

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

标签: python dataframe pandas html-table


【解决方案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 或自动类型检测。

    【讨论】:

      猜你喜欢
      • 2019-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-13
      • 2020-10-31
      相关资源
      最近更新 更多