Python 将列表中的嵌套Dict转换为数据帧
我试图将数据组织到一个数据框架中,数据最初的形式是:Python 将列表中的嵌套Dict转换为数据帧,python,pandas,dataframe,dictionary,Python,Pandas,Dataframe,Dictionary,我试图将数据组织到一个数据框架中,数据最初的形式是: {'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': 1589972
{'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}
我想格式化它,使我的索引是日期(每天),我唯一的列是“关闭”。我是python新手,在正确设置格式方面遇到了很多困难,这就是我到目前为止所做的:
SPY_close=td_client.get_price_history('SPY')
SPY_close=pd.DataFrame(SPY_close)
SPY_close=pd.DataFrame.drop(SPY_close, columns=['empty', 'symbol'])
这给了我:
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}
我还尝试:
SPYdf=pd.DataFrame(SPY['cands'])
SPYdf['datetime']=pd.to_datetime(SPYdf['datetime'],单位为毫秒)
SPYdf.head()
我用这个得到了KeyError:“蜡烛”
我在这里尝试了多种解决类似问题的方法,但没有一种有效,但我觉得应该很简单。非常感谢您的帮助。一种方法是使用
json\u normalize
或from\u 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
或:
一种方法是使用
json\u normalize
或from\u 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
或:
您可以使用:
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'])
输出:
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
您可以使用:
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'])
输出:
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
像这样:
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
像这样:
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
你没有做任何修改就复制了这段代码并运行了吗?我很抱歉,当我用我的数据标签替换d时,我使用了错误的标签导致了错误。你没有做任何修改就复制了这段代码并运行了吗?我很抱歉,当我将数据标签替换为d时,我使用了错误的标签,导致错误
蜡烛是您共享的字典中的主键。检查我的更新答案。这很有效,最初我用d替换数据标签时,不小心抓到了错误的数据标签。感谢您的帮助。蜡烛
是您共享的词典中的主键。检查我的更新答案。这很有效,最初我用d替换数据标签时,不小心抓到了错误的数据标签。谢谢你的帮助。SPY\u close\u df=pd.DataFrame(data=SPY\u close[“蜡烛])
<代码>我得到了一个关键错误:“蜡烛”与这一个
基于您共享的内容,这不应该发生。请提供一个,以及整个错误输出。SPY\u close\u df=pd.DataFrame(data=SPY\u close[“蜡烛”)
<代码>我得到了一个关键错误:“蜡烛”与这一个
基于您共享的内容,这不应该发生。请提供一个,以及整个错误输出。