Создание более расширяемого извлечения данных из файлов JSON - PullRequest
0 голосов
/ 14 октября 2018

Я перебираю большое количество файлов Json, извлекая данные в переменные перед тем, как поместить данные в фрейм данных.Примерно так:

    fullTimeEmployees = financial_data['fullTimeEmployees']
    longBusinessSummary = financial_data['longBusinessSummary']
    currentRatio = data['quoteSummary']['result'][0]['financialData']['currentRatio']['raw']
    datarow = [fullTimeEmployees,longBusinessSummary,currentRatio]
    output_data.append(datarow)

df = pd.DataFrame (output_data, columns = ['fullTimeEmployees', 'longBusinessSummary', 'currentRatio' ,,,,,,

Есть либолее эффективно было делать это в цикле и конфигурации? В идеале, позволяя мне лучше обхватывать сообщения об ошибках, а также более легко добавлять поля данных.

Пример набора данных JSON приведен здесь: https://query2.finance.yahoo.com/v10/finance/quoteSummary/1109.HK?formatted=true&crumb=cmEFpzsN8.l&lang=en-CA&region=CA&modules=defaultKeyStatistics%2CsummaryProfile%2CassetProfile%2CincomeStatementHistory%2CincomeStatementHistoryQuarterly%2CbalanceSheetHistory%2CbalanceSheetHistoryQuarterly%2CcashflowStatementHistory%2CcashflowStatementHistoryQuarterly%2CdefaultKeyStatistics%2CfinancialData%2CcalendarEvents%2CsecFilings%2CrecommendationTrend%2CupgradeDowngradeHistory%2CinstitutionOwnership%2CfundOwnership%2CmajorDirectHolders%2CmajorHoldersBreakdown%2CinsiderTransactions%2CinsiderHolders%2CnetSharePurchaseActivity%2Cearnings%2CearningsHistory%2CearningsTrend%2CindustryTrend%2CindexTrend%2CsectorTrend&corsDomain=ca.finance.yahoo.com

1 Ответ

0 голосов
/ 14 октября 2018
import urllib.request
import json

url = 'https://query2.finance.yahoo.com/v10/finance/quoteSummary/1109.HK?formatted=true&crumb=cmEFpzsN8.l&lang=en-CA&region=CA&modules=defaultKeyStatistics%2CsummaryProfile%2CassetProfile%2CincomeStatementHistory%2CincomeStatementHistoryQuarterly%2CbalanceSheetHistory%2CbalanceSheetHistoryQuarterly%2CcashflowStatementHistory%2CcashflowStatementHistoryQuarterly%2CdefaultKeyStatistics%2CfinancialData%2CcalendarEvents%2CsecFilings%2CrecommendationTrend%2CupgradeDowngradeHistory%2CinstitutionOwnership%2CfundOwnership%2CmajorDirectHolders%2CmajorHoldersBreakdown%2CinsiderTransactions%2CinsiderHolders%2CnetSharePurchaseActivity%2Cearnings%2CearningsHistory%2CearningsTrend%2CindustryTrend%2CindexTrend%2CsectorTrend&corsDomain=ca.finance.yahoo.com'
req = urllib.request.Request(url)
with urllib.request.urlopen(req) as res:
  json_data = json.loads(res.read().decode('utf-8'))

asset = json_data['quoteSummary']['result'][0]['assetProfile']
trend = json_data['quoteSummary']['result'][0]['recommendationTrend']
cashf = json_data['quoteSummary']['result'][0]['cashflowStatementHistory']

print(asset['address1'])

for t in trend['trend']:
  print(t['period'], t['strongBuy'], t['buy'], t['hold'], t['sell'], t['strongSell'])

for c in cashf['cashflowStatements']:
  print(f"Cash flow: {c['endDate']['raw']} - {c['endDate']['fmt']}")
  print(f"Net Income: {c['netIncome']['raw']}")

Выход:

China Resources Building
0m 0 0 0 0 0
-1m 6 18 1 0 0
-2m 6 20 1 0 0
-3m 7 20 0 0 0
Cash flow: 1514678400 - 2017-12-31
Net Income: 23016685000
Cash flow: 1483142400 - 2016-12-31
Net Income: 19500880000
Cash flow: 1451520000 - 2015-12-31
Net Income: 17697752000
Cash flow: 1419984000 - 2014-12-31
Net Income: 15140938000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...