zoukankan      html  css  js  c++  java
  • 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 _id id_no name
    0 5c7138f4e0411eb39749fdff 1 student1
    1 5c7138f4e0411eb39749fe00 2 student2
    2 5c7138f4e0411eb39749fe01 3 student3

    含有嵌套数据

    如果我们读取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.$oid id_no name scores.art scores.math scores.music
    0 5c7138f4e0411eb39749fdff 1 student1 72 63
    1 5c7138f4e0411eb39749fe00 2 student2 70 58
    2 5c7138f4e0411eb39749fe01 3 student3 80 66
  • 相关阅读:
    C++默认参数
    C++中对象初始化
    类设计者的核查表
    函数返回数组
    UVA439 骑士的移动 Knight Moves
    P2415 集合求和(一道洛谷好题鸭)(虽然可以水过,但有必研究DP)
    最小生成树(Kruskal)
    并查集(许多东西的基本哦)
    堆模板(STL版)
    线段树模板(贼慢的版本)
  • 原文地址:https://www.cnblogs.com/lestatzhang/p/10611335.html
Copyright © 2011-2022 走看看