我有一个小数据框,想要转换为json文件。我希望json文件格式不错(使用缩进等)。另外,我希望数据帧的其中一列成为json数据的关键。这是一个例子:
输入数据框:
start_date Nums ID tag
51 2016-03-13 00:00:00 3110 2 787623
55 2016-03-17 00:00:00 676754 1 787623
json的所需输出格式:[注意:索引51和55消失,标记值78723已成为'键']。以下要求
{
"787623": [{
"start_date": "2016-03-13",
"Nums": "3110",
"ID": "2"
}, {
"start_date": "2016-03-17",
"Nums": "676754",
"ID": "1"
}]
}
目前,我正在做一个简单的df.to_json(jsonFile, date_format = 'iso', orient = 'records')
,它产生一个更紧凑的json文件,如下所示:
[{"start_date":"2016-03-13T00:00:00.000Z","Nums":3110,"ID":2,"tag":787623},{"start_date":"2016-03-17T00:00:00.000Z","Nums":676754,"ID":1,"tag":787623}]
但是,我喜欢格式很好的风格。
感谢任何帮助。
答案 0 :(得分:4)
DataFrame.to_dict()
方法有很多关于字典布局方式的选项。然后,您可以使用indent
模块函数中的json
选项来创建格式正确的字符串。
示例:
d={}
for tag,group in df.set_index('tag').groupby(level='tag'):
d[str(tag)]=group.to_dict(orient='records')
print(json.dumps(d,indent=1))
给出
{
"787623": [
{
"ID": 2,
"Nums": 3110,
"start_date": "2016-03-13"
},
{
"ID": 1,
"Nums": 676754,
"start_date": "2016-03-17"
}
]
}
如果你在标签字段中没有重复的条目,那么单线程就行了。
答案 1 :(得分:1)
这应该这样做:
df.groupby('tag').apply(lambda df: df.to_dict(orient='records')).to_json(date_format='iso')
{"787623":[{"ID":2,"tag":787623,"start_date":"2016-03-13","Nums":3110},{"ID":1,"tag":787623,"start_date":"2016-03-17","Nums":676754}]}