Broker API,JSON到DataFrame

时间:2013-11-22 16:11:23

标签: python json api pandas

我试图从我的经纪人API(xTrade Brokers)

获取历史数据

我先尝试过:

import json
import pandas as pd

data=json.loads(history)
dafr = pd.DataFrame(data,columns=['col1','col2'])

之后我尝试了下面的版本,但仍然没有进行管理以获得正确的DataFrame格式,因此我可以将其用于回测。

def main():
    # create new api client and connect to the SERVER
    apiClient = APIClient(address=SERVER, port=PORT, encrypt=True)
    # prepare the login command
    loginCmd = loginCommand(USERID, PASSWORD)
    # execute login command and get streaming session ID
    loginResponse = apiClient.execute(loginCmd)
    streamSessionId = loginResponse['streamSessionId']
    print('Logged in as ' + str(USERID))
    # create new stream client with given stream session ID
    streamClient = APIStreamClient(address=SERVER, port=STREAMING_PORT, ssId=streamSessionId)
    print('Streaming opened')
    # prepare get server time command
    getServerTimeCmd = baseCommand('getServerTime', dict())
    # get server time
    getServerTimeResponse = apiClient.execute(getServerTimeCmd)
    print('Server time: ' + str(getServerTimeResponse['returnData']['timeString']))
    # prepare get all symbols command`

    mySymbol = 'EURUSD'
    getHistory = baseCommand("getChartLastRequest", dict(info = dict(symbol = mySymbol, period = 5, start = 1384981096762)))
    history = apiClient.execute(getHistory)
    x = pd.DataFrame(history['returnData']['rateInfos'])

我无法将该JSON中的数据提取到DataFrame。

如果我在上面的脚本后打印x。此外,如果我只是打印x,它只是告诉我名字'x'没有定义。

1 个答案:

答案 0 :(得分:0)

将字符串传递给DataFrame构造函数将不起作用(它只会传播该值)。

执行此操作的最佳方法是使用read_json直接读取url /字符串(0.12中的新内容):

df = pd.read_json(history)

如果您已将其作为字符串使用,则可以使用StringIO使其类似于文件:

from StringIO import StringIO  # alternatively, from io import StringIO
pd.DataFrame(StringIO(data))