Python - конвертировать Dict, скрытый в списке, в DataFrame - PullRequest
0 голосов
/ 21 февраля 2019

У меня проблемы с использованием нормализации в JSON для словаря, который распознается как список.Цель состоит в том, чтобы создать фрейм данных из yahoo_finance.

from yahoofinancials import YahooFinancials
import pandas as pd
from pandas.io.json import json_normalize

ticker = 'AAPL'
yahoo_financials = YahooFinancials(ticker)
balance_sheet_data_qt = yahoo_financials.get_financial_stmts('quarterly', 'balance')

#The return is a bit messy, I've simplified it with:
user_dict=balance_sheet_data_qt.get('balanceSheetHistoryQuarterly').get(ticker)
df=pd.DataFrame(user_dict)

Но, по-прежнему испытывая проблемы с переносом данных через финишную черту, целью для каждой квартальной даты будет индекс в каждой строке и ключ.финансы указаны в столбцах.

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Вы можете использовать ChainMap из коллекций.

from collections import ChainMap    
df = pd.DataFrame.from_dict(ChainMap(*user_dict), orient='index')

Если вы не хотите использовать ChainMap, вы можете перебирать dict в user_dict (список), а затем добавлять эти DF в основнуюdf.

df = pd.DataFrame()

for d in user_dict:
  df = df.append(pd.DataFrame.from_dict(d, orient='index'))

ChainMap работает значительно быстрее для меня

1.43 ms ± 13.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

против

7 ms ± 121 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
0 голосов
/ 21 февраля 2019

Я думаю, это то, что вы ищете.

Ниже указана дата в качестве индекса и финансовые данные в столбцах:

dataframe_entries = list()
for result in balance_sheet_data_qt.get('balanceSheetHistoryQuarterly').get('AAPL'):
    extracted_date = list(result)[0]
    dataframe_row = list(result.values())[0]
    dataframe_row['date'] = extracted_date
    dataframe_entries.append(dataframe_row)

df = pd.DataFrame(dataframe_entries).set_index('date')

Выходы:

date            accountsPayable               treasuryStock                     
2018-12-29      44293000000      ...          -3588000000
2018-09-29      55888000000      ...          -3454000000
2018-06-30      38489000000      ...          -3111000000
2018-03-31      34311000000      ...          -3064000000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...