[英]How to convert pandas dataframe into nested dictionary or json?
[英]How to convert pandas dataframe to nested dictionary
我正在运行 Python 3.6 和 Pandas 0.19.2,并且有一个如下所示的 DataFrame:
Name Chain Food Healthy
George McDonalds burger False
George KFC chicken False
John Wendys burger False
John McDonalds salad True
我想将此数据框转换为如下所示的字典:
health_data = {'George': {'McDonalds': {'Food': 'burger', 'Healthy':False},
'KFC': {'Food': 'chicken', 'Healthy':False}},
'John': {'Wendys': {'Food': 'burger', 'Healthy':False},
'McDonalds': {'Food': 'salad', 'Healthy': True}}}
到目前为止,我的想法是:
df.groupby
对名称列进行分组df.to_dict()
将数据帧转换为字典,如下所示: health_data = input_data.set_index('Chain').T.to_dict()
想法? 预先感谢您的帮助。
我认为你非常接近。
df = df.groupby('Name')[['Chain','Food','Healthy']]
.apply(lambda x: x.set_index('Chain').to_dict(orient='index'))
.to_dict()
print (df)
{'George': {'KFC': {'Healthy': False, 'Food': 'chicken'},
'McDonalds': {'Healthy': False, 'Food': 'burger'}},
'John': {'McDonalds': {'Healthy': True, 'Food': 'salad'},
'Wendys': {'Healthy': False, 'Food': 'burger'}}}
使用字典理解和groupby
的解决方案:
{n: grp.loc[n].to_dict('index')
for n, grp in df.set_index(['Name', 'Chain']).groupby(level='Name')}
{'George': {'KFC': {'Food': 'chicken', 'Healthy': False},
'McDonalds': {'Food': 'burger', 'Healthy': False}},
'John': {'McDonalds': {'Food': 'salad', 'Healthy': True},
'Wendys': {'Food': 'burger', 'Healthy': False}}}
使用defaultdict
的解决方案:
from collections import defaultdict
d = defaultdict(dict)
for i, row in df.iterrows():
d[row.Name][row.Chain] = row.drop(['Name', 'Chain']).to_dict()
dict(d)
{'George': {'KFC': {'Food': 'chicken', 'Healthy': False},
'McDonalds': {'Food': 'burger', 'Healthy': False}},
'John': {'McDonalds': {'Food': 'salad', 'Healthy': True},
'Wendys': {'Food': 'burger', 'Healthy': False}}}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.