J'essaie d'organiser les données dans un DataFrame, les données étaient à l'origine sous la forme:
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}
Je veux le formater afin que mon index soit la date (quotidienne) et mon seule la colonne est «close». Je suis novice en python et j'ai beaucoup de mal à le mettre en forme correctement, c'est 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'])
qui m'a donné:
XXX
J'ai aussi essayé:
SPYdf = pd.DataFrame (SPY ['candles'])
SPYdf ['datetime'] = pd.to_datetime (SPYdf ['datetime'], unité = 'ms')
SPYdf.head ()
J'obtiens KeyError: 'Candles' avec celui-ci
J'ai essayé plusieurs solutions à des problèmes similaires sur ici et aucun d'entre eux n'a fonctionné, mais je pense que cela devrait être assez simple à faire. J'apprécierais toute aide.
3 Réponses :
Une méthode consiste à utiliser json_normalize ou from_dict:
df = pd.DataFrame.from_dict(d['candles'])
Or:
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
Avez-vous copié ce code exact sans aucune modification et l'avez-vous exécuté?
Je m'excuse, lorsque j'ai remplacé mon étiquette de données par d, j'ai utilisé la mauvaise, ce qui a entraîné l'erreur
Vous pouvez utiliser:
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
Sortie:
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'])
Comme ceci:
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
bougies est la clé principale du dictionnaire que vous avez partagé. Vérifiez ma réponse mise à jour.
Cela a très bien fonctionné, au départ, j'ai accidentellement saisi la mauvaise étiquette de données lorsque je l'ai remplacée par d. Merci pour l'aide.
SPY_close_df = pd.DataFrame (data = SPY_close ["bougies"])?J'obtiens KeyError: 'Candles' avec celui-ciD'après ce que vous avez partagé, cela ne devrait pas se produire. Veuillez fournir un exemple reproductible minimal , ainsi que la sortie d'erreur complète.