Преобразование вывода JSON API TD Ameritrade в фрейм данных Pandas

Новичок в Python здесь. Недавно подключился к API моего TD Ameritrade и попытался извлечь информацию о позиции моей учетной записи для дальнейшего анализа. Однако у меня возникли проблемы с преобразованием вывода JSON API в фрейм данных Pandas, любые рекомендации будут высоко оценены.

Вот код:

import pprint
import pandas as pd
from config import consumer_key, redirect_uri, credentials_path
from td.client import TDClient

# Create a new instance of the client
td_client = TDClient(client_id = consumer_key, redirect_uri = redirect_uri, credentials_path = credentials_path)

# Login to a new session
td_client.login()

# Positions and Orders for an account or account(s)
positions = td_client.get_accounts(account = 'all', fields = ['positions'])
pprint.pprint(positions)

Вот фрагмент вывода:

{'securitiesAccount': {'accountId': 'xxxx',
                       'currentBalances': {'accruedInterest': 0.0,
                                           'bondValue': 0.0,
                                           'cashAvailableForTrading': xxx,
                                           'cashAvailableForWithdrawal': xxx,
                                           'cashBalance': 0.0,
                                           'cashCall': 0.0,
                                           'cashDebitCallValue': 0.0,
                                           'cashReceipts': 0.0,
                                           'liquidationValue': xxx,
                                           'longMarketValue': xxx,
                                           'longNonMarginableMarketValue': xxx,
                                           'longOptionMarketValue': 0.0,
                                           'moneyMarketFund': xxx,
                                           'mutualFundValue': 0.0,
                                           'pendingDeposits': 0.0,
                                           'savings': 0.0,
                                           'shortMarketValue': 0.0,
                                           'shortOptionMarketValue': 0.0,
                                           'totalCash': 0.0,
                                           'unsettledCash': 0.0},
                       'initialBalances': {'accountValue': xxx,
                                           'accruedInterest': 0.0,
                                           'bondValue': 0.0,
                                           'cashAvailableForTrading': xxx,
                                           'cashAvailableForWithdrawal': xxx,
                                           'cashBalance': 0.0,
                                           'cashDebitCallValue': 0.0,
                                           'cashReceipts': 0.0,
                                           'isInCall': False,
                                           'liquidationValue': xxx,
                                           'longOptionMarketValue': 0.0,
                                           'longStockValue': xxx,
                                           'moneyMarketFund': xxx,
                                           'mutualFundValue': 0.0,
                                           'pendingDeposits': 0.0,
                                           'shortOptionMarketValue': 0.0,
                                           'shortStockValue': 0.0,
                                           'unsettledCash': 0.0},
                       'isClosingOnlyRestricted': False,
                       'isDayTrader': False,
                       'positions': [
                                     {'averagePrice': 46.14,
                                      'currentDayProfitLoss': -8.4,
                                      'currentDayProfitLossPercentage': -1.92,
                                      'instrument': {'assetType': 'EQUITY',
                                                     'cusip': '02209S103',
                                                     'symbol': 'MO'},
                                      'longQuantity': 10.0,
                                      'maintenanceRequirement': 0.0,
                                      'marketValue': 429.4,
                                      'settledLongQuantity': 10.0,
                                      'settledShortQuantity': 0.0,
                                      'shortQuantity': 0.0},
                                     {'averagePrice': 152.14,
                                      'currentDayProfitLoss': -1.52,
                                      'currentDayProfitLossPercentage': -0.43,
                                      'instrument': {'assetType': 'EQUITY',
                                                     'cusip': '88579Y101',
                                                     'symbol': 'MMM'},
                                      'longQuantity': 2.0,
                                      'maintenanceRequirement': 0.0,
                                      'marketValue': 351.32,
                                      'settledLongQuantity': 2.0,
                                      'settledShortQuantity': 0.0,
                                      'shortQuantity': 0.0},
                                ],
                       'projectedBalances': {'cashAvailableForTrading': xxx,
                                             'cashAvailableForWithdrawal': xxx},
                       'roundTrips': 0,
                       'type': 'CASH'}}

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

Я пробовал следующий код, но он не возвращает желаемых результатов:

df = pd.json_normalize(positions)
print(positions)

Спасибо за ваше время!

Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
1
0
953
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы всегда можете разделить свои данные, создав файл new_dict.

new_dict = (словарь['securitiesAccount']['positions'])

Ответ принят как подходящий

Может показаться запутанным назвать ваш ответ «позициями», а затем искать этот ключ, но, тем не менее, вам нужно использовать полный путь к ключу позиций.

pd.json_normalize(positions['securitiesAccount']['positions'])

Выход

   averagePrice  currentDayProfitLoss  currentDayProfitLossPercentage  longQuantity  maintenanceRequirement  marketValue  settledLongQuantity  settledShortQuantity  shortQuantity instrument.assetType instrument.cusip instrument.symbol
0        46.140                -8.400                          -1.920        10.000                   0.000      429.400               10.000                 0.000          0.000               EQUITY        02209S103                MO
1       152.140                -1.520                          -0.430         2.000                   0.000      351.320                2.000                 0.000          0.000               EQUITY        88579Y101               MMM

Другие вопросы по теме