python pandas.read_json () не работает для IG Labs REST - PullRequest
0 голосов
/ 29 сентября 2018

Я пытаюсь прочитать некоторую строку json в кадр данных pandas.Кажется, я могу получить сам JSON.Но когда я пытаюсь использовать фрейм данных pandas для его чтения, это кажется неудачным.

У кого-нибудь есть какие-либо мысли?

import requests
import json
import pandas

url = 'https://demo-api.ig.com/gateway/deal'
s = requests.Session()
s.headers = { 'Content-Type' : 'application/json; charset=UTF-8',
              'Accept' : 'application/json; charset=UTF-8',
              'VERSION' : '2',
              'X-IG-API-KEY' : 'XXX'
              }
data = { 'identifier' : 'XXX',
         'password' : 'XXX'
         }

r = s.post(url + '/session', json=data)
r.json()

Я получаю данные строки json ниже

> {'accountType': 'CFD',  'accountInfo': {'balance': 0,  
> 'deposit': 0.0,   'profitLoss': 0.0,   'available': 0}, 
> 'currencyIsoCode': 'GBP',  'currencySymbol': '£',  'currentAccountId':
> 'XXXX',  'lightstreamerEndpoint':
> 'https://demo-apd.marketdatasystems.com',  'accounts': [{'accountId':
> 'xxx',    'accountName': 'Demo-Spread bet',    'preferred': False,  
> 'accountType': 'SPREADBET'},   {'accountId': 'xxx',   
> 'accountName': 'Demo-CFD',    'preferred': True,    'accountType':
> 'CFD'}],  'clientId': 'xxx',  'timezoneOffset': 1, 
> 'hasActiveDemoAccounts': True,  'hasActiveLiveAccounts': True, 
> 'trailingStopsEnabled': False,  'reroutingEnvironment': None, 
> 'dealingEnabled': True}

Однако, когда я пытаюсь преобразовать r.json () в панду, используя data = pandas.read_json (r.json ());Я получаю сообщение об ошибке ValueError: Неверный путь к файлу или тип объекта буфера:

1 Ответ

0 голосов
/ 30 сентября 2018

Импорт:

import pandas as pd

Создание основного фрейма данных:

df_main = pd.DataFrame()

Данные: не в формате json

data = {'accountType': 'CFD',
        'accountInfo': {'balance': 0,
                        'deposit': 0.0,
                        'profitLoss': 0.0,
                        'available': 0},
        'currencyIsoCode': 'GBP',
        'currencySymbol': '£',
        'currentAccountId': 'XXXX',
        'lightstreamerEndpoint': 'https://demo-apd.marketdatasystems.com',
        'accounts': [{'accountId': 'xxx',
                      'accountName': 'Demo-Spread bet',
                      'preferred': False,
                      'accountType': 'SPREADBET'}, 
                     {'accountId': 'xxx',
                      'accountName': 'Demo-CFD',
                      'preferred': True,
                      'accountType': 'CFD'}],
        'clientId': 'xxx',
        'timezoneOffset': 1, 
        'hasActiveDemoAccounts': True,
        'hasActiveLiveAccounts': True, 
        'trailingStopsEnabled': False,
        'reroutingEnvironment': None, 
        'dealingEnabled': True}

DataFrame.from_dict: каждый ключ является индексом

df = pd.DataFrame.from_dict(data, orient='index')

Транспонировать его: каждый ключ теперь является заголовком столбца изначения в строках

df_trans = df.transpose()

Добавить к df_main: каждая запись добавляется к df_main

df_main = df_main.append(df_tras, ignore_index=True)

Пожалуйста, не забудьте поставить галочку рядом с выбранным ответом

Это допустимый формат json ваших данных: Вставьте его в файл и назовите файл data.json, затемиспользуйте pd.read_json('data.json'), и вы получите тот же результат, что и df = pd.DataFrame.from_dict(data, orient='index').

{
   "data":{
      "accountType":"CFD",
      "accountInfo":{
         "balance":0,
         "deposit":0.0,
         "profitLoss":0.0,
         "available":0
      },
      "currencyIsoCode":"GBP",
      "currencySymbol":"£",
      "currentAccountId":"XXXX",
      "lightstreamerEndpoint":"https://demo-apd.marketdatasystems.com",
      "accounts":[
         {
            "accountId":"xxx",
            "accountName":"Demo-Spread bet",
            "preferred":"False",
            "accountType":"SPREADBET"
         },
         {
            "accountId":"xxx",
            "accountName":"Demo-CFD",
            "preferred":"True",
            "accountType":"CFD"
         }
      ],
      "clientId":"xxx",
      "timezoneOffset":1,
      "hasActiveDemoAccounts":"True",
      "hasActiveLiveAccounts":"True",
      "trailingStopsEnabled":"False",
      "reroutingEnvironment":"None",
      "dealingEnabled":"True"
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...