我有一个Python字典,其中包含列表作为与键对应的值。现在每个列表包含另外两个字典,数据如下所示:
data = {'A': [{'Set1': {'Apple':1, 'Banana:2'}, 'Set2': {'Orange':1}],
'B': [{'Set1': {'Apple':3, 'Banana:1', Carrot:2}, 'Set2': {}],
'C': [{'Set1': {'Apple':1, 'Banana:2'}, 'Set2': {'Pineapple':5}]}
我想将此数据转换为pandas DataFrame
,结果应如下所示:
Set1 Set2
A {'Apple':1, 'Banana:2'} {'Orange':1}
B {'Set1': {'Apple':3, 'Banana:1', Carrot:2} {}
C {'Apple':1, 'Banana:2'} {'Pineapple':5}
我怎样才能做到这一点?
P.S:我尝试了pd.DataFrame(data)
和pd.DataFrame.from_dict(data)
,但这没效果。
答案 0 :(得分:2)
我认为你需要:
data = {'A': [{'Set1': {'Apple':1, 'Banana':2}, 'Set2': {'Orange':1}}],
'B': [{'Set1': {'Apple':3, 'Banana':1, 'Carrot':2}, 'Set2': {}}],
'C': [{'Set1': {'Apple':1, 'Banana':2}, 'Set2': {'Pineapple':5}}]}
df = (pd.concat({k: pd.DataFrame(v) for k, v in data.items()})
.reset_index(level=1, drop=True))
print (df)
Set1 Set2
A {'Banana': 2, 'Apple': 1} {'Orange': 1}
B {'Carrot': 2, 'Banana': 1, 'Apple': 3} {}
C {'Banana': 2, 'Apple': 1} {'Pineapple': 5}
答案 1 :(得分:0)
这是一个通过字典理解的解决方案:
data = {'A': [{'Set1': {'Apple':1, 'Banana':2}, 'Set2': {'Orange':1}}],
'B': [{'Set1': {'Apple':3, 'Banana':1, 'Carrot':2}, 'Set2': {}}],
'C': [{'Set1': {'Apple':1, 'Banana':2}, 'Set2': {'Pineapple':5}}]}
df = pd.DataFrame({i: [data[k][0][i] for k in data] for i in data['A'][0]},
index=data)
# Set1 Set2
# A {'Apple': 1, 'Banana': 2} {'Orange': 1}
# B {'Apple': 3, 'Banana': 1, 'Carrot': 2} {}
# C {'Apple': 1, 'Banana': 2} {'Pineapple': 5}