Python 如何将每行包含Dict的数据帧列解析为独立的数据帧列?

Python 如何将每行包含Dict的数据帧列解析为独立的数据帧列?,python,pandas,dataframe,dictionary,Python,Pandas,Dataframe,Dictionary,我有以下数据帧: TradeDictionary 0 {'id': '545', 'instrument': 'EUR_USD', 'price'... 1 {'id': '539', 'instrument': 'GBP_USD', 'price'... 2 {'id': '535', 'instrument': 'EUR_USD', 'price'... 3 {'id': '529', 'instrument': 'EUR_USD', 'price'... 4 {

我有以下数据帧:

    TradeDictionary
0   {'id': '545', 'instrument': 'EUR_USD', 'price'...
1   {'id': '539', 'instrument': 'GBP_USD', 'price'...
2   {'id': '535', 'instrument': 'EUR_USD', 'price'...
3   {'id': '529', 'instrument': 'EUR_USD', 'price'...
4   {'id': '523', 'instrument': 'EUR_USD', 'price'...
5   {'id': '501', 'instrument': 'EUR_USD', 'price'...
6   {'id': '495', 'instrument': 'GBP_USD', 'price'...
7   {'id': '489', 'instrument': 'EUR_USD', 'price'...
8   {'id': '483', 'instrument': 'EUR_USD', 'price'...
9   {'id': '477', 'instrument': 'EUR_USD', 'price'...
10  {'id': '471', 'instrument': 'GBP_USD', 'price'...

但是,我需要将其转换为数据帧中的独立列。我在其他帖子中尝试了许多建议,但似乎不喜欢。

df.apply中使用
pd.Series

In [1426]: df = pd.DataFrame({'TradeDictionary':[{'id': '545', 'instrument': 'EUR_USD', 'price':100}, {'id': '539', 'instrument': 'GBP_USD', 'price':200}, {'id': '535', 'instrument': 'EUR_USD', 'price':50}]})

In [1427]: df
Out[1427]: 
                                     TradeDictionary
0  {'id': '545', 'instrument': 'EUR_USD', 'price'...
1  {'id': '539', 'instrument': 'GBP_USD', 'price'...
2  {'id': '535', 'instrument': 'EUR_USD', 'price'...

In [1429]: df1 = df.TradeDictionary.apply(pd.Series)

In [1430]: df1
Out[1430]: 
    id instrument  price
0  545    EUR_USD    100
1  539    GBP_USD    200
2  535    EUR_USD     50
或为了获得更好的性能,请使用
pd.json\u规范化

In [1432]: df1 = pd.json_normalize(df.TradeDictionary)

您是否尝试过迭代、解析和连接?您尝试过什么?这是我尝试过的方法之一,但它返回的数据帧与0完全相同,而不是TradeDictionary标题。列的数据类型为Object。它将始终以
键的名称作为列名返回数据帧。在新的数据框中,它永远不会返回
TradeDictionary
作为列名。是的,我知道,但是数据框只是作为一个列,其中包含字典字符串。可能是因为
TradeDictionary
列在
df
中不是一个正确的
dict
。检查我创建的示例
df
。在上面运行代码。查看dict的源代码,我使用的API是高度嵌套的,我已经去掉了不相关的信息,现在上面的代码按预期工作:)