Как я могу извлечь определенные объекты, транспонировать и объединить несколько, сложных заложенных файлов JSON в CSV с Python

Программы на Python
Anonymous
 Как я могу извлечь определенные объекты, транспонировать и объединить несколько, сложных заложенных файлов JSON в CSV с

Сообщение Anonymous »

Я знаю о нескольких сообщениях, которые охватывают эту тему, я заранее прошу прощения. Я читал и пробовал несколько раз.https://data.sec.gov/api/xbrl/companyfa ... 20193.json
https://data.sec.gov/api/xbrl/companyfa ... 22010.json
https://data.sec.gov/api/xbrl/companyfa ... 22606.json
< /code>
Основные ключи-это cik, entityname, факты.
в фактах: "dei", "us-gaap".
В любом из двух фактов у вас есть «Концепция», в кавычках, которая не назначена ключом ... вздох.{
"cik": 320193,
"entityName": "Apple Inc.",
"facts": {
"dei": {
"EntityCommonStockSharesOutstanding": {
"label": "Entity Common Stock, Shares Outstanding",
"description": "Indicate number of shares or other units outstanding of each of registrant'.......etc....",
"units": {
"shares": [
{
"end": "2009-06-27",
"val": 895816758,
"accn": "0001193125-09-153165",
"fy": 2009,
"fp": "Q3",
"form": "10-Q",
"filed": "2009-07-22",
"frame": "CY2009Q2I"
},
}
]
}
}
},
"us-gaap": {
"AccountsPayable": {
"label": "Accounts Payable (Deprecated 2009-01-31)",
"description": "Carrying value as of the balance sheet date of liabilities incurred (and for which invoices have typically been received) and payable to vendors for goods and services received that are used in an entity's business. For classified balance sheets, used to reflect the current portion of the liabilities (due within one year or within the normal operating cycle if longer); for unclassified balance sheets, used to reflect the total liabilities (regardless of due date).",
"units": {
"USD": [
{
"end": "2008-09-27",
"val": 5520000000,
"accn": "0001193125-09-153165",
"fy": 2009,
"fp": "Q3",
"form": "10-Q",
"filed": "2009-07-22",
"frame": "CY2008Q3I"
},

< /code>
Вот одна из нескольких попыток, которые я попробовал: < /p>
import pandas as pd
import os
import glob
import json

OUTPUT_PATH = "../output/concepts/csv/"
fildir = '../resources/companyfacts/'
fils = os.path.join(fildir, '*.json')
filist = glob.glob(fils)

for fils in filist:
i = open(fils, "r")
sec_data = json.loads(i.read())
try:
for item in sec_data["facts"]["dei"]:
i.close()
except:
continue
try:
for item in sec_data["facts"]["us-gaap"]:
i.close()
except:
continue
dfs = [pd.read_json(fils) for sec_data in filist]
data = {"concepts": {}}
for item in sec_data["facts"]["dei"]:
if f"{item}" not in data:
data[f"{item}"] = {}
data[f"{item}"] = item
for item in sec_data["facts"]["us-gaap"]:
if f"{item}" not in data:
data[f"{item}"] = {}
data[f"{item}"] = item
df = pd.concat(dfs, ignore_index=True)
df = pd.DataFrame(data).transpose()
df.to_csv(OUTPUT_PATH + "CONCEPTS.csv")
< /code>
Результаты вывода: < /p>
concepts
EntityCommonStockSharesOutstanding
EntityPublicFloat
AccruedLiabilitiesCurrent
AdditionalPaidInCapital
CommonStockParOrStatedValuePerShare
CommonStockSharesAuthorized
......
......
......etc
< /code>
Что я хочу:
Во -первых, я хочу, чтобы сценарий пропустил и обработал следующий файл в списке, для любого файла, который не соответствует ключам JSON, он ищет для Полем (Любые проблемы, которые возникают в обработке файла).
Некоторые файлы пусты, а в некоторых файлах нет объектов «US-GAAP» или «dei» в ключе фактов. Есть несколько тысяч файлов. Одна ошибка, которая возникает: < /p>
for item in sec_data["facts"]["us-gaap"]:
~~~~~~~~~~~~~~~~~^^^^^^^^^^^
KeyError: 'us-gaap'

< /code>
Тогда я хочу, чтобы мой файл CSV выглядел так: < /p>
CIK0000320193-concepts: CIK0001722010-concepts: CIK0001722606-concepts:
concpet list #1 here concept list #2 here concept list #3 here
< /code>
Пожалуйста, простите меня, я не самый лучший с кодом, но у меня все хорошо с шаблонами, деталями и решением проблем. Самое близкое, что я получил при проверке руководств и других вопросов стека, - это вывод, который обрабатывает только один из нескольких файлов в моей папке.

Подробнее здесь: https://stackoverflow.com/questions/793 ... omplex-nes

Вернуться в «Python»