#python #pandas #dataframe
#python #панды #dataframe
Вопрос:
Я пытаюсь постепенно создавать базу данных финансовых отчетов. Первые шаги сосредоточены на сборе 10-Ks из базы данных EDGAR SEC. У меня есть код для извлечения соответствующих 8-Ks, 10-Ks и 10-Qs по номеру CIK и регистрационному номеру и получения соответствующей электронной таблицы Excel. Приведенный ниже код теперь сосредоточен на попытке создать папку в каталоге, затем назовите папку кодом CIK, затем извлеките электронную таблицу из базы данных EDGAR и сохраните электронную таблицу в папке с кодом CIK. Мой пример — файл csv, который я вызываю «accessionnumtest.csv», который имеет заголовки:
имя_компании, тип_отчета, cik, дата,cik_accession
и данные:
4Less Group, Inc., 10K / A, 1438901, 27.11.2019,edgar/data/1438901/000121390019024801.txt
AB INTERNATIONAL GROUP CORP., 10K, 1605331, 22.10.2019,edgar/data/1605331/000166357719000384.txt
ABM INDUSTRIES INC / DE /,10K, 771497, 20.12.2019,edgar/data/771497/000162828019015259.txt
ACTUANT CORP, 10K,6955, 29.10.2019,edgar/data/6955/000000695519000033.txt
мой код приведен ниже
import os
import pandas as pd
path = os.getcwd()
folder_path = "C:/metricdatadb/"
df = pd.read_csv("accessionnumtest.csv")
folder_name = df['cik']
print(folder_name)
for row in df.iterrows():
dir = df.path.join(folder_path, folder_name)
os.makedirs(dir)
Этот код выдает мне ошибку AttributeError: объект ‘DataFrame’ не имеет атрибута ‘path’. Я переименовал путь, проверил наличие пробелов в заголовках. Любые предложения приветствуются.
Ответ №1:
Что касается ошибки: os.path.join
. Нет pd.path.join
. Вы вызываете неправильный модуль.
При этом ваш код не выполняет то, что вы пытаетесь сделать, независимо от ошибки. folder_name
не будет обновляться для каждой строки. Вы могли бы сделать row.cik
, чтобы получить значение для каждого iterrows()
dir = os.path.join(folder_path, row.cik)
Ответ №2:
Относительно неясно, над чем вы работаете, особенно с файлами .csv и Pandas. В имеющемся у вас коде, похоже, много любопытных ошибок, которые, я думаю, можно было бы исправить, вернувшись к изучению некоторых из более простых концепций Python, прежде чем пытаться делать что-то столь сложное, как веб-очистка. Обратите внимание, что я не хочу сдаваться, а не создавать основы — необходимый шаг в этом типе проекта.
Тем не менее, если я правильно понимаю ваши намерения, вы хотите создать файловую иерархию для 10-K, 10-Q и т. Д. файлы для нескольких CIK.
Для этого не должно быть необходимости использовать файлы .csv или pandas.
Вероятно, самым простым способом сделать это было бы сделать это на том же шаге, на котором вы их загружаете.
Псевдокод для этого будет выглядеть следующим образом:
for cik in list_of_ciks:
first_file = find_first_file_online();
if first_file is 10-K:
save_to_10-K folder for CIK
if first_file is 10-Q:
save_to_10-Q folder for CIK
Как я уже говорил выше, вы можете пропустить файл .csv (также обратите внимание, что CSV означает «значение, разделенное запятыми». Некоторые записи в ваших данных содержат запятые, например, «4Less Group, Inc.». Это несовместимо с файлом CSV, поскольку он разделит одну запись на два столбца через запятую, переместив все ваши данные на один столбец).
При обработке данных вы захотите создавать папки по ходу работы.
Когда вы выполняете итерацию по новому CIK, создайте главную папку для этого CIK. Когда вы столкнетесь с 10-K, создайте папку для 10-K и сохраните ее с уникальным именем. Поскольку вам нужно использовать регистрационные номера для получения листов Excel, это было бы неплохим соглашением об именах.
Это было бы что-то вроде этого:
import requests
import pathlib
cik_list = [cik_1, cik_2... cik_n]
for cik in cik_list:
file = requests.get("cik/accession/Report.xlsx").data
with open(pathlib.Path(cik, report_type, accession_number ".xlsx", "wb")) as excel_file:
excel_file.write(file.data)
Приведенный выше код определенно не будет выполняться и не включает в себя все, что вам нужно для его работы, поскольку эта информация была написана вами. Интеграция вышеуказанных концепций в ваш код зависит от вас.
Чтобы повторить, у вас есть CIK, регистрационный номер и тип отчета. Чтобы сохранить файлы в папках, вам нужно только создавать папки по ходу работы с формой «CIK/report_type/accession.xlsx «
Комментарии:
1. Катрадора, могу ли я как-нибудь связаться с вами по этому поводу?
2. Мы должны попытаться ответить на этот вопрос публично, чтобы люди с подобной проблемой в будущем могли найти ответ. Я думаю, что нам не хватает некоторых частей головоломки. Можете ли вы отредактировать свой вопрос, добавив больше своего кода и лучшее объяснение того, что вы хотите сделать и почему, и мы можем перейти оттуда?
3. Достаточно справедливо. Я понимаю, что мои навыки программирования не там, где они должны быть, если я собираюсь добиться успеха в своем проекте в отведенные мной сроки. Эта задача программирования составляла примерно 2% от большего усилия, которое должно занять всего час или два, и я борюсь с этим уже неделю. Кажется, я не могу разбить все усилия, чтобы получить простую помощь, которую, как я думал, мне понадобится для прохождения всего проекта. Я начинаю думать, что мне нужно будет нанять квалифицированного разработчика, чтобы сделать все это, если я хочу, чтобы мой проект был завершен в ближайшие несколько месяцев. Еще раз спасибо Catradora за вашу помощь