панды загружают фрейм данных из строки - PullRequest
0 голосов
/ 24 октября 2018

Я хочу просканировать форму SEC Edgar 13F (в формате txt) и разобрать ее в pandas.DataFrame,

исходную ссылку на данные: https://www.sec.gov/Archives/edgar/data/1067983/000119312512060928/0001193125-12-060928.txt

Я пытаюсь использовать bs4 для извлечения таблицыкак это:

from bs4 import BeautifulSoup

def get_page(url):
    url_client = urlopen(url)
    page = url_client.read()
    url_client.close()
    return page

history_url = 'https://www.sec.gov/Archives/edgar/data/1067983/000119312513060317/0001193125-13-060317.txt'

txt_soup = BeautifulSoup(getPage(history_url), 'xml')

затем я извлекаю таблицу из супа:

table = txt_soup.find_all('TABLE')[0]
table_header = table.contents[1].contents[0]
table_data = table.contents[1].contents[1]

table_data выглядит так:

<S> <C> <C> <C> <C> <C> <C> <C> <C> <C>
AMERICAN
  EXPRESS CO        COM           025816109      112,209     1,952,142 Shared-Defined 4           1,952,142       -        -
AMERICAN
  EXPRESS CO        COM           025816109      990,116    17,225,400 Shared-Defined 4, 5       17,225,400       -        -
AMERICAN
  EXPRESS CO        COM           025816109       48,274       839,832 Shared-Defined 4, 7          839,832       -        -
AMERICAN
  EXPRESS CO        COM           025816109      111,689     1,943,100 Shared-Defined 4, 8, 11    1,943,100       -        -
AMERICAN
  EXPRESS CO        COM           025816109      459,532     7,994,634 Shared-Defined 4, 10       7,994,634       -        -
AMERICAN
  EXPRESS CO        COM           025816109    6,912,308   120,255,879 Shared-Defined 4, 11     120,255,879       -        -
AMERICAN
  EXPRESS CO        COM           025816109       80,456     1,399,713 Shared-Defined 4, 13       1,399,713       -        -
ARCHER DANIELS
  MIDLAND CO        COM           039483102      163,151     5,956,600 Shared-Defined 4, 5        5,956,600       -        -

Теперь я хочу преобразоватьэтот str в pandas.DataFrame, я попытался использовать:

from io import StringIO
pd.read_csv(StringIO(table_data.text), header=None)

Этот код не выполнен и возвращает ошибку:

ParserError: Error tokenizing data. C error: Expected 1 fields in line 3, saw 6

Как правильно проанализировать этот вид таблицы txt?Есть ли лучший способ сделать это?

1 Ответ

0 голосов
/ 24 октября 2018

Я не слишком опытен в Dandas Dataframes, но, глядя на код, я думаю, что знаю, в чем проблема.

В строке 3:

EXPRESS CO        COM           025816109      112,209     1,952,142 Shared-Defined 4           1,952,142       -        -

Кажется,разделяйте данные запятыми (поскольку в файлах csv обычно используется разделитель запятых).Поэтому вместо того, чтобы пропустить одно поле, вы пропустите шестую:

EXPRESS CO        COM           025816109      112
209     1
952
142 Shared-Defined 4           1
952
142       -        -

Мое предлагаемое решение - удалить все запятые из table_data:

table_data = table_data.replace(',', '')

и попробовать еще раз.Пожалуйста, дайте мне знать, как это происходит!

...