J'essaie d'organiser les données dans un DataFrame, les données étaient à l'origine sous la forme de:

{'candles': [{'open': 295.43, 'high': 295.47, 'low': 295.32, 'close': 295.4, 'volume': 15483, 'datetime': 1589972400000}, {'open': 295.35, 'high': 295.51, 'low': 295.35, 'close': 295.51, 'volume': 14187, 'datetime': 1589972460000}, {'open': 295.49, 'high': 295.49, 'low': 295.46, 'close': 295.46, 'volume': 3792, 'datetime': 1589972520000}, {'open': 295.44, 'high': 295.47, 'low': 295.39, 'close': 295.41, 'volume': 6121, 'datetime': 1589972580000}

Je veux le formater pour que mon index soit la date (quotidienne) et ma seule colonne est «close». Je suis novice en python et j'ai beaucoup de mal à le formater correctement, voici ce que j'ai jusqu'à présent:

SPY_close=td_client.get_price_history('SPY')
SPY_close=pd.DataFrame(SPY_close)
SPY_close=pd.DataFrame.drop(SPY_close, columns=['empty', 'symbol'])

Ce qui m'a donné:

    candles
0   {'open': 295.43, 'high': 295.47, 'low': 295.32, 'close': 295.4, 'volume': 15483, 'datetime': 1589972400000}
1   {'open': 295.35, 'high': 295.51, 'low': 295.35, 'close': 295.51, 'volume': 14187, 'datetime': 1589972460000}
2   {'open': 295.49, 'high': 295.49, 'low': 295.46, 'close': 295.46, 'volume': 3792, 'datetime': 1589972520000}
3   {'open': 295.44, 'high': 295.47, 'low': 295.39, 'close': 295.41, 'volume': 6121, 'datetime': 1589972580000}
4   {'open': 295.41, 'high': 295.46, 'low': 295.38, 'close': 295.38, 'volume': 10295, 'datetime': 1589972640000}

J'ai aussi essayé:

SPYdf = pd.DataFrame(SPY['candles']) SPYdf['datetime'] = pd.to_datetime(SPYdf['datetime'], unit='ms') SPYdf.head()

Je reçois KeyError: 'Candles' avec celui-ci

J'ai essayé plusieurs solutions à des problèmes similaires ici et aucune d'elles n'a fonctionné, mais je pense que cela devrait être assez simple à faire. J'apprécierais toute aide.

1
haydenr4 5 juin 2020 à 01:39

3 réponses

Meilleure réponse

Comme ça:

d = {'candles': [{'open': 295.43, 'high': 295.47, 'low': 295.32, 'close': 295.4, 'volume': 15483, 'datetime': 1589972400000}, {'open': 295.35, 'high': 295.51, 'low': 295.35, 'close': 295.51, 'volume': 14187, 'datetime': 1589972460000}, {'open': 295.49, 'high': 295.49, 'low': 295.46, 'close': 295.46, 'volume': 3792, 'datetime': 1589972520000}, {'open': 295.44, 'high': 295.47, 'low': 295.39, 'close': 295.41, 'volume': 6121, 'datetime': 1589972580000}

In [1864]: df = pd.DataFrame(d['candles']).set_index('datetime')    
In [1865]: df
Out[1865]: 
                open   high    low  close  volume
datetime                                         
1589972400000 295.43 295.47 295.32 295.40   15483
1589972460000 295.35 295.51 295.35 295.51   14187
1589972520000 295.49 295.49 295.46 295.46    3792
1589972580000 295.44 295.47 295.39 295.41    6121
0
Mayank Porwal 4 juin 2020 à 23:00

Vous pouvez utiliser:

d = {'candles': [{'open': 295.43, 'high': 295.47, 'low': 295.32, 
                  'close': 295.4, 'volume': 15483, 'datetime': 1589972400000}, 
                 {'open': 295.35, 'high': 295.51, 'low': 295.35, 
                  'close': 295.51, 'volume': 14187, 'datetime': 1589972460000}, 
                 {'open': 295.49, 'high': 295.49, 'low': 295.46,
                  'close': 295.46, 'volume': 3792, 'datetime': 1589972520000}, 
                 {'open': 295.44, 'high': 295.47, 'low': 295.39, 
                  'close': 295.41, 'volume': 6121, 'datetime': 1589972580000}]
    }
pd.DataFrame(d['candles'])

Production:

     open    high     low   close  volume       datetime
0  295.43  295.47  295.32  295.40   15483  1589972400000
1  295.35  295.51  295.35  295.51   14187  1589972460000
2  295.49  295.49  295.46  295.46    3792  1589972520000
3  295.44  295.47  295.39  295.41    6121  1589972580000
0
Quang Hoang 4 juin 2020 à 22:44

Une méthode consiste à utiliser json_normalize ou from_dict:

d = {'candles': [{'open': 295.43, 'high': 295.47, 'low': 295.32, 'close': 295.4, 'volume': 15483, 'datetime': 1589972400000}, {'open': 295.35, 'high': 295.51, 'low': 295.35, 'close': 295.51, 'volume': 14187, 'datetime': 1589972460000}, {'open': 295.49, 'high': 295.49, 'low': 295.46, 'close': 295.46, 'volume': 3792, 'datetime': 1589972520000}, {'open': 295.44, 'high': 295.47, 'low': 295.39, 'close': 295.41, 'volume': 6121, 'datetime': 1589972580000}]}
df = pd.json_normalize(d['candles'])
print(df)

    open    high     low   close  volume       datetime
0  295.43  295.47  295.32  295.40   15483  1589972400000
1  295.35  295.51  295.35  295.51   14187  1589972460000
2  295.49  295.49  295.46  295.46    3792  1589972520000
3  295.44  295.47  295.39  295.41    6121  1589972580000

Ou:

df = pd.DataFrame.from_dict(d['candles'])
0
NYC Coder 4 juin 2020 à 22:43