为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 pandas 从文件中提取 html 表?

如何使用 pandas 从文件中提取 html 表?

守候你守候我 2023-09-19 17:33:56
我是 pandas 新手,我正在尝试从一些 HTML 文件中提取一些数据。如何转换多个 HTML 表,如下所示:       PS4Game Name | PriceGoW       | 49.99FF VII R  | 59.99       XBXGame Name | PriceGears 5   | 49.99Forza 5   | 59.99<table>  <tr colspan="2">    <td>PS4</td>  </tr>  <tr>    <td>Game Name</td>    <td>Price</td>  </tr>  <tr>    <td>GoW</td>    <td>49.99</td>  </tr>  <tr>    <td>FF VII R</td>    <td>59.99</td>  </tr></table><table>  <tr colspan="2">    <td>XBX</td>  </tr>  <tr>    <td>Game Name</td>    <td>Price</td>  </tr>  <tr>    <td>Gears 5</td>    <td>49.99</td>  </tr>  <tr>    <td>Forza 5</td>    <td>59.99</td>  </tr></table>像这样的 json 对象:[  { "Game Name": "Gow", "Price": "49.99", "platform": "PS4"},  { "Game Name": "FF VII R", "Price": "59.99", "platform": "PS4"},  { "Game Name": "Gears 5", "Price": "49.99", "platform": "XBX"},  { "Game Name": "Forza 5", "Price": "59.99", "platform": "XBX"}]我尝试使用 pandas.read_html(path/to/file) 加载包含表的 html 文件,它确实返回了 DataFrame 列表,但我不知道之后如何提取数据,特别是平台名称位于标题而不是作为单独的列。我使用 pandas 是因为我从包含其他形式的表格和 HTML 代码的本地 htm 文件中提取这些表格,所以我使用:tables = pandas.read_html(file_path, match="Game Name")使用基于该列名称的匹配参数快速隔离我需要的表。
查看完整描述

1 回答

?
红颜莎娜

TA贡献1842条经验 获得超12个赞

import pandas as pd


# list to save all dataframe from all tables in all files

df_list = list()


# list of files to load

list_of_files = ['test.html']


# iterate through your files

for file in list_of_files:

    

    # create a list of dataframes from the tables in the file

    dfl = pd.read_html(file, match='Game Name')

    

    # fix the headers and columns

    for d in dfl:


        # select row 1 as the headers

        d.columns = d.iloc[1]


        # select row 0, column 0 as the platform

        d['platform'] = d.iloc[0, 0]


        # selection row 2 and below as the data, row 0 and 1 were the headers

        d = d.iloc[2:]


        # append the cleaned dataframe to df_list

        df_list.append(d.copy())

        

# create a single dataframe

df = pd.concat(df_list).reset_index(drop=True)


# create a list of dicts from df

records = df.to_dict('records')


print(records)

[out]:

[{'Game Name': 'GoW', 'Price': '49.99', 'platform': 'PS4'},

 {'Game Name': 'FF VII R', 'Price': '59.99', 'platform': 'PS4'},

 {'Game Name': 'Gears 5', 'Price': '49.99', 'platform': 'XBX'},

 {'Game Name': 'Forza 5', 'Price': '59.99', 'platform': 'XBX'}]


查看完整回答
反对 回复 2023-09-19
  • 1 回答
  • 0 关注
  • 58 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信