Python 将字典列表中的字典转换为数据帧

Python 将字典列表中的字典转换为数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,我从Robinhood函数robin\u stocks.get\u option\u historicals()中提取了AAPL的历史期权价格列表。数据以字典列表的形式返回,如下所示 我很难将下面的对象(名为historicalData)转换为DataFrame。有人能帮忙吗 historicalData = {'data_points': [{'begins_at': '2020-10-05T13:30:00Z', 'open_price': '1.430000', 'close_

我从Robinhood函数
robin\u stocks.get\u option\u historicals()
中提取了AAPL的历史期权价格列表。数据以字典列表的形式返回,如下所示

我很难将下面的对象(名为
historicalData
)转换为
DataFrame
。有人能帮忙吗

historicalData = {'data_points': [{'begins_at': '2020-10-05T13:30:00Z',
   'open_price': '1.430000',
   'close_price': '1.430000',
   'high_price': '1.430000',
   'low_price': '1.430000',
   'volume': 0,
   'session': 'reg',
   'interpolated': False},
{'begins_at': '2020-10-05T13:40:00Z',
   'open_price': '1.430000',
   'close_price': '1.340000',
   'high_price': '1.440000',
   'low_price': '1.320000',
   'volume': 0,
   'session': 'reg',
   'interpolated': False}],
'open_time': '0001-01-01T00:00:00Z',
'open_price': '0.000000',
'previous_close_time': '0001-01-01T00:00:00Z',
'previous_close_price': '0.000000',
'interval': '10minute',
'span': 'week',
'bounds': 'regular',
'id': '22b49380-8c50-4c76-8fb1-a4d06058f91e',
'instrument': 'https://api.robinhood.com/options/instruments/22b49380-8c50-4c76-8fb1-a4d06058f91e/'}
我尝试了以下代码,但没有帮助:

import pandas as pd
df = pd.DataFrame(historicalData)
df

用下面的方法很容易解决这个问题。我已经通过列表理解将数据框扔到了一个列表中

import pandas as pd
df_list = [pd.DataFrame(dic.items(), columns=['Parameters', 'Value']) for dic in historicalData['data_points']]
然后你可以做:

df_list[0]
这将产生

     Parameters                 Value
0     begins_at  2020-10-05T13:30:00Z
1    open_price              1.430000
2   close_price              1.430000
3    high_price              1.430000
4     low_price              1.430000
5        volume                     0
6       session                   reg
7  interpolated                 False

用下面的方法很容易解决这个问题。我已经通过列表理解将数据框扔到了一个列表中

import pandas as pd
df_list = [pd.DataFrame(dic.items(), columns=['Parameters', 'Value']) for dic in historicalData['data_points']]
然后你可以做:

df_list[0]
这将产生

     Parameters                 Value
0     begins_at  2020-10-05T13:30:00Z
1    open_price              1.430000
2   close_price              1.430000
3    high_price              1.430000
4     low_price              1.430000
5        volume                     0
6       session                   reg
7  interpolated                 False

您没有写下只想要数据点(如 其他答案),所以我假设您想要整本词典 转换为数据帧

要执行此操作,请从代码开始:

df = pd.DataFrame(historicalData)
它创建一个数据帧,数据点“分解”到 连续的行,但它们仍然是字典

然后将“打开价格”列重命名为“打开所有价格”:

原因是为了避免联接后出现重复的列名 即将执行(数据点也包含未平仓价格 属性,我希望从数据点得到相应的列 “继承”此名称)

下一步是创建一个临时数据帧,即 data_中的字典指向各个列:

wrk = df.data_points.apply(pd.Series)
打印wrk以查看结果

最后一步是将df与wrk和drop连接起来 数据点列(不再需要,因为它是 拆分为单独的列):


您没有写下只想要数据点(如 其他答案),所以我假设您想要整本词典 转换为数据帧

要执行此操作,请从代码开始:

df = pd.DataFrame(historicalData)
它创建一个数据帧,数据点“分解”到 连续的行,但它们仍然是字典

然后将“打开价格”列重命名为“打开所有价格”:

原因是为了避免联接后出现重复的列名 即将执行(数据点也包含未平仓价格 属性,我希望从数据点得到相应的列 “继承”此名称)

下一步是创建一个临时数据帧,即 data_中的字典指向各个列:

wrk = df.data_points.apply(pd.Series)
打印wrk以查看结果

最后一步是将df与wrk和drop连接起来 数据点列(不再需要,因为它是 拆分为单独的列):


非常感谢您的及时,我的目的是播种开始、开盘、收盘、高价、数量、会话、插值和我的数据帧列。上面的代码似乎没有做到这一点。我还可以使用其他代码吗?非常感谢您的及时帮助,我的目的是在开始时播种、开盘价、收盘价、高价、成交量、会话、插值和我的数据帧列。上面的代码似乎没有做到这一点。还有其他代码我可以使用吗?非常感谢,这完全回答了我的问题。如果事实是这样的话,我只想通过wrk这一步。非常感谢,这完全回答了我的问题。如果事实是这样的话,我只想和wrk合作。