Pandas加载含有嵌套(nested)文档的mongodb数据

读取MongoDB数据到Pandas中

我们可以通过pymongo包连接mongodb进行数据处理,然后将数据存储到pandas的dataframe里面。

例子中的student表的数据结构如下:

	{'_id': ObjectId('5c7138f4e0411eb39749fdff'), 'name': 'student1', 'id_no': 1, 'scores': {'math': 63, 'art': 72, 'music': 93}}
	{'_id': ObjectId('5c7138f4e0411eb39749fe00'), 'name': 'student2', 'id_no': 2, 'scores': {'math': 58, 'art': 70, 'music': 67}}
	{'_id': ObjectId('5c7138f4e0411eb39749fe01'), 'name': 'student3', 'id_no': 3, 'scores': {'math': 66, 'art': 80, 'music': 81}}
不含嵌套数据

如果我们读取mongodb的数据不含嵌套数据,我们可以直接将其载入到Pandas的dataframe中:

import pymongo as pm
import pandas as pd
import numpy as np
import datetime as dt
client = pm.MongoClient('mongodb://user1:user1@127.0.0.1:27017')
db = client['my_db']
proection = {'name':1,'id_no':1, }
mongo_data = list(db['students'].find({}, proection))
df = pd.DataFrame(mongo_date)

结果如下

index_idid_noname
05c7138f4e0411eb39749fdff1student1
15c7138f4e0411eb39749fe002student2
25c7138f4e0411eb39749fe013student3
含有嵌套数据

如果我们读取mongodb的数据含有嵌套数据,我们需要先将所有嵌套的数据通过json_util工具先解析出来,具体代码如下:

import pymongo as pm
import pandas as pd
import numpy as np
import datetime as dt
from bson import json_util
from pandas.io.json import json_normalize
import json
client = pm.MongoClient('mongodb://user1:user1@127.0.0.1:27017')
db = client['my_db']
mongo_data = list(db['students'].find({}))
sanitized = json.loads(json_util.dumps(mongo_data))
normalized = json_normalize(sanitized)
df = pd.DataFrame(normalized)
print(df)

结果如下:

_id.$oidid_nonamescores.artscores.mathscores.music
05c7138f4e0411eb39749fdff1student17263
15c7138f4e0411eb39749fe002student27058
25c7138f4e0411eb39749fe013student38066

转载于:https://www.cnblogs.com/lestatzhang/p/10611335.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值