【问题标题】:Reading several different tables from url/html file and setting headers从 url/html 文件中读取几个不同的表并设置标题
【发布时间】:2020-01-08 13:13:01
【问题描述】:

所以,我有一个包含多个表格的 html 文件,我正在读取这样的文件:

tables = pd.read_html(filename, decimal=',', thousands=None, header=0)

但是,pandas 将第一个表的标题设置为其他表的其余部分。有什么方法可以设置 pandas 来收集每个表的标题?

【问题讨论】:

    标签: python-3.x pandas


    【解决方案1】:

    知道了。所以最后,感谢that genius reply 我成功了:

    tables = pd.read_html(filename, decimal=',', thousands=None)
            for t in tables:
                header = t.iloc[0]
                print(header)
                t = t[1:]
                t.columns=header
                print(t)
    

    所以我为每个表分配了不同的标题值。

    【讨论】:

      【解决方案2】:

      Pandas 通常会在不同的 Dataframe 中正确读取它。 我从不使用 headers=0,但在下面显示的情况下,无论是否正常,它都可以正常工作。

      你的 html 文件是什么样子的? 也许你必须先清理你的 html 字符串。可以分享一下吗?

      下面的例子效果很好

      import pandas as pd
      
      
      html_tables = """
      <html>
      <header>
      <title>Data Tables</title>
      </header>
      <body>
      Table1
      <table>
        <thead>
          <tr>
            <th>Title 1</th>
            <th>Number 1</th> 
            <th>Year 1</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td>C</td>
            <td>122,4</td> 
            <td>1972</td>
          </tr>
          <tr>
            <td>Python</td>
            <td>2,44</td> 
            <td>1989</td>
          </tr>
          <tr>
            <td>Ruby</td>
            <td>44,55</td> 
            <td>1995</td>
          </tr>
        </tbody>
      </table>
      Some text in between<br>
      Table2
      <table>
        <thead>
          <tr>
            <th>Title 2</th>
            <th>Number 2</th> 
            <th>Year 2</th>
          </tr>
        </thead>
        <tbody>
           <tr>
            <td>C</td>
            <td>111,4</td> 
            <td>1872</td>
          </tr>
          <tr>
            <td>Python</td>
            <td>4,55</td> 
            <td>1889</td>
          </tr>
          <tr>
            <td>Ruby</td>
            <td>66,55</td> 
            <td>1895</td>
          </tr>
        </tbody>
      </table>
      Text after
      </body>
      """
      
      dfs = pd.read_html(html_tables,decimal=',', thousands=None)
      
      print("First Dataframe")
      print("###################")
      print(dfs[0])
      print("###################")
      print("Second Dataframe")
      print("###################")
      print(dfs[1])
      
      
      
      First Dataframe
      ###################
        Title 1  Number 1  Year 1
      0       C    122.40    1972
      1  Python      2.44    1989
      2    Ruby     44.55    1995
      ###################
      Second Dataframe
      ###################
        Title 2  Number 2  Year 2
      0       C    111.40    1872
      1  Python      4.55    1889
      2    Ruby     66.55    1895
      
      

      【讨论】:

      • 嗯,你看,这个文件真的很旧,大约是 2004 年的,同时它的编写也相当糟糕,即使对于 2004 年的 HTML 标准也是如此。我现在不能和你分享 HTML ,因为我在开发过程中。但是,我会尝试修改文件 2night 并将其添加到此处,只是为了体验。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-03
      • 2016-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多