Python 将嵌套的mongo db文档转换为dataframe
我有一个mongoDB集合,里面有这样的文档Python 将嵌套的mongo db文档转换为dataframe,python,json,pandas,dictionary,json-normalize,Python,Json,Pandas,Dictionary,Json Normalize,我有一个mongoDB集合,里面有这样的文档 doc = { "_id": { "$oid": "516622c9ce21150200000d87" }, "SubmissionDate": { "$date": "2013-04-11T02:41:13.162Z" }, "isComplete": True, &q
doc = {
"_id": {
"$oid": "516622c9ce21150200000d87"
},
"SubmissionDate": {
"$date": "2013-04-11T02:41:13.162Z"
},
"isComplete": True,
"Rounds": [
{
"Photo": [
],
"A": {
"Complexity": 55,
"Colour": 85,
"Deep": 51,
"Effervescence": 44
},
"B": {
"QualityPIDs": [
],
"QualityScales": [
],
"Complexity": 43,
"Qualities": [
]
},
"C": {
"QualityPIDs": [
],
"QualityScales": [
],
"Complexity": 60,
"UHS": 46,
"Colour": 33,
"Qualities": [
]
},
"D": {
"Complexity": 73,
"Duration": 68,
"Quality": 65
}
}
],
"Item": {
"_id": {
"$oid": "51e6d678c06918db21156f92"
},
"Country": "Australia",
"Name": "King",
"PeopleId": {
"$oid": "51dddb69a9d9350200000"
},
"Style": "Apple",
"Type": "Flat",
"UserSubmitted": False
}
}
我需要将此集合转换为熊猫数据帧
这里建议的解决方案
做主要工作。但我还是有
在这一列中插入一组词典
我做了一组循环以访问循环的子字典
最后,我将一个_数据连接到我的主数据框
有没有更快的方法?现在循环需要很多时间。谢谢大家! - 可以使用
参数指定mata
的每个级别,并对dict
记录路径使用
'Rounds'
将熊猫作为pd导入
meta=[''id','$oid'],
[‘项目’、‘国家’],
['Item','Name'],
['Item','Style'],
['Item','Type'],
['Item','UserSubmitted'],
['Item'、'u id'、'$oid'],
['Item','PeopleId','$oid'],
['SubmissionDate','$date'],
“isComplete”]
df=pd.json\u规范化(doc,record\u path='Rounds',meta=meta)
#显示(df)
照片A.复杂度A.颜色A.深A.气泡B.质量B.质量等级B.复杂度B.质量C.质量C.质量等级C.复杂度C.超高S.颜色C.质量D.复杂度D.持续时间D.质量id.$oid项目.国家项目.名称项目.样式项目.类型项目.用户提交的项目.\U id.$oidItem.PeopleId.$oid SubmissionDate.$date已完成
0 [] 55 85 51 44 [] [] 43 [] [] [] 60 46 33 []73 68 65 516622c9ce21150200000d87澳大利亚金苹果平板假51e6d678c06918db21156f92 51dddb69a9d9350200000 2013-04-11T02:41:13.162Z真
谢谢!你的解决方案非常有效,我不知道这个参数。很抱歉延迟了我的反馈。感谢您的时间和帮助!
df = pd.json_normalize(doc)
A_data = pd.DataFrame(columns=df.Rounds[0][0]['A'].keys())
for i in range(len(df.Rounds)):
A_data = A_data.append(pd.json_normalize(df.Rounds[0][0]['A']), ignore_index=True)