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[“蜡烛”)
<代码>我得到了一个关键错误:“蜡烛”与这一个
基于您共享的内容,这不应该发生。请提供一个,以及整个错误输出。