如何从嵌套字典制作数据框

时间:2020-08-26 14:32:33

标签: python list dictionary

我有一本字典,我想从中制作一个数据框。

这是我的字典:

my_dictio = 
{'url': 'www.google.com', 'value': 
[{'Car': 'Mercedes', 'Engine': 'Hybrid', 'Entity1': {'Country': 'US', 'Owner': 'Richard', 'Entity2': {'Type': 'type1', 'Payment': 'cash'}}},
{'Car': 'Audi', 'Engine': 'Hybrid', 'Entity1': {'Country': 'DE', 'Owner': 'Mesut', 'Entity2': {'Type': 'type2', 'Payment': 'cash'}}}, 
{'Car': 'Volkswagen', 'Engine': 'Gas', 'Entity1': {'Country': 'FR', 'Owner': 'Paul', 'Entity2': {'Type': 'type3', 'Payment': 'card'}}}]}

这是我正在使用的代码,当我运行它时,我将CarEngineEntity1作为列:

dictio1 = my_dictio ['value']
df1= pd.DataFrame(dictio1)

这是我的预期结果:

enter image description here

我想学习,看看问题出在哪里。感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

imo,更容易就地编辑。

import pandas as pd

my_dictio = {'url': 'www.google.com', 'value': 
[{'Car': 'Mercedes', 'Engine': 'Hybrid', 'Entity1': {'Country': 'US', 'Owner': 'Richard', 'Entity2': {'Type': 'type1', 'Payment': 'cash'}}},
{'Car': 'Audi', 'Engine': 'Hybrid', 'Entity1': {'Country': 'DE', 'Owner': 'Mesut', 'Entity2': {'Type': 'type2', 'Payment': 'cash'}}}, 
{'Car': 'Volkswagen', 'Engine': 'Gas', 'Entity1': {'Country': 'FR', 'Owner': 'Paul', 'Entity2': {'Type': 'type3', 'Payment': 'card'}}}]}

ok = my_dictio['value']

for i in ok:
    i['Type'] = i['Entity1']['Entity2']['Type']
    i['Owner'] = i['Entity1']['Owner']
    del i['Entity1']
    
df1= pd.DataFrame(ok)

答案 1 :(得分:1)

您可以这样操作:

import pandas as pd

my_dictio = {'url': 'www.google.com', 'value':
[{'Car': 'Mercedes', 'Engine': 'Hybrid', 'Entity1': {'Country': 'US', 'Owner': 'Richard', 'Entity2': {'Type': 'type1', 'Payment': 'cash'}}},
{'Car': 'Audi', 'Engine': 'Hybrid', 'Entity1': {'Country': 'DE', 'Owner': 'Mesut', 'Entity2': {'Type': 'type2', 'Payment': 'cash'}}}, 
{'Car': 'Volkswagen', 'Engine': 'Gas', 'Entity1': {'Country': 'FR', 'Owner': 'Paul', 'Entity2': {'Type': 'type3', 'Payment': 'card'}}}]}

values = my_dictio['value']

car = []
engine = []
owner = []
car_type = []

for v in values:
    car.append(v['Car'])
    engine.append(v['Engine'])
    owner.append(v['Entity1']['Owner'])
    car_type.append(v['Entity1']['Entity2']['Type'])


df = pd.DataFrame({'car':car, 'engine':engine, 'owner':owner, 'car_type':car_type})

print(df)

输出以下内容:

          car  engine    owner car_type
0    Mercedes  Hybrid  Richard    type1
1        Audi  Hybrid    Mesut    type2
2  Volkswagen     Gas     Paul    type3

请注意,Python中的type是保留关键字。我会远离使用...

答案 2 :(得分:1)

尝试一下

my_dictio = {'url': 'www.google.com', 'value': 
[{'Car': 'Mercedes', 'Engine': 'Hybrid', 'Entity1': {'Country': 'US', 'Owner': 'Richard', 'Entity2': {'Type': 'type1', 'Payment': 'cash'}}},
{'Car': 'Audi', 'Engine': 'Hybrid', 'Entity1': {'Country': 'DE', 'Owner': 'Mesut', 'Entity2': {'Type': 'type2', 'Payment': 'cash'}}}, 
{'Car': 'Volkswagen', 'Engine': 'Gas', 'Entity1': {'Country': 'FR', 'Owner': 'Paul', 'Entity2': {'Type': 'type3', 'Payment': 'card'}}}]}

代码:

for row in dic['value']:
  owner = row.get('Entity1', {}).get('Owner')
  _type = row.get('Entity1', {}).get('Entity2', {}).get('Type')
  row.pop('Entity1')
  row.update({'Owner':owner, 'Type':_type})
  
df = pd.DataFrame(dic['value'])

结果:

enter image description here