首页 > 解决方案 > 如何将凌乱的 html 表转换为 pandas 数据框

问题描述

我正在尝试抓取 SEC 10-Q 和 10-K 文件。虽然我能够提取表格,但 CSV 输出有点混乱。有什么方法可以将具有相似标题名称的列与熊猫合并?或者任何可以帮助我将 SEC 归档数据表导出为 csv 的库?


[user@server sec_parser]$ /usr/bin/python3 /home/user/work_files/sec_parser/parser.py --file 10-Q-cmcsa-3312017x10q.htm 
                                                   0   1       2       3     4   5       6       7     8   9      10   11
0                                       (in millions) NaN    2017    2017  2017 NaN    2016    2016  2016 NaN    NaN  NaN
1                                             Revenue NaN       $   20463   NaN NaN       $   18790   NaN NaN    8.9    %
2                                 Costs and Expenses: NaN     NaN     NaN   NaN NaN     NaN     NaN   NaN NaN    NaN  NaN
3                          Programming and production NaN    6074    6074   NaN NaN    5431    5431   NaN NaN   11.8  NaN
4                  Other operating and administrative NaN    5827    5827   NaN NaN    5526    5526   NaN NaN    5.4  NaN
5                Advertising, marketing and promotion NaN    1530    1530   NaN NaN    1466    1466   NaN NaN    4.4  NaN
6                                        Depreciation NaN    1915    1915   NaN NaN    1785    1785   NaN NaN    7.3  NaN
7                                        Amortization NaN     587     587   NaN NaN     493     493   NaN NaN   19.0  NaN
8                                    Operating income NaN    4530    4530   NaN NaN    4089    4089   NaN NaN   10.8  NaN
9                   Other income (expense) items, net NaN    (625    (625     ) NaN    (554    (554     ) NaN   13.0  NaN
10                         Income before income taxes NaN    3905    3905   NaN NaN    3535    3535   NaN NaN   10.4  NaN
11                                 Income tax expense NaN  (1,258  (1,258     ) NaN  (1,311  (1,311     ) NaN   (4.1    )
12                                         Net income NaN    2647    2647   NaN NaN    2224    2224   NaN NaN   19.0  NaN
13  Net (income) loss attributable to noncontrolli... NaN     (81     (81     ) NaN     (90     (90     ) NaN  (10.2    )
14     Net income attributable to Comcast Corporation NaN       $    2566   NaN NaN       $    2134   NaN NaN   20.2    %

我试图转换为 CSV https://edgartable.netlify.app/的示例表。

这是我的代码

import os
import argparse
import sys
from bs4 import BeautifulSoup
import argparse
import pandas as pd


args = argparse.ArgumentParser()
args.add_argument('--file', type=str)
args.add_argument('--list', type=str)

opts = args.parse_args()


def parse_file(file):

    data_map = []
    div = []
    tables = []
    soup = BeautifulSoup(open(file, 'r'), 'html.parser')

    for div in soup.find_all('div'):
        if 'Consolidated Operating Results' not in str(div.find('font')): continue

        table = div.find('table')

        dataset = pd.read_html(str(table), skiprows=3)

        print(dataset[0])

        for i, data in enumerate(dataset):
            data.to_csv(f'test{i}.csv', '|', index=False, header=False)


def main():
    parse_file(opts.file)

if __name__ == "__main__": main()

标签: pythonpandasbeautifulsoupedgar

解决方案


尝试这个:

    import pandas as pd
    df = pd.read_html('https://edgartable.netlify.app/')
    df = df[0]
    df.to_csv('test.csv')

推荐阅读