美文网首页pythonpython爬虫与数据分析
利用Pandas实现Mongodb的多表连接查询并将DataFr

利用Pandas实现Mongodb的多表连接查询并将DataFr

作者: 越大大雨天 | 来源:发表于2019-03-14 13:35 被阅读130次
    • 接上一篇文章,利用pandas完成了对mongodb数据库中的小区名字聚合查询以及批量经纬度的爬取,并将获取的信息写入了一个新的Mongodb表中。
    • 新目标:需要把数据库中原始表格(包含10w+房源信息)和新表(包含7k+小区经纬度信息)进行合并。使两表以小区名为连接键,在原始表信息后准确添加对应的经纬度信息。
    import pymongo
    import pandas as pd
    import matplotlib as plt
    #连接到数据库
    client = pymongo.MongoClient("localhost",27017)
    lianjia = client["ershoufang"]
    info = lianjia["lianjia_info"]
    location = lianjia['location_info']
    
    #将数据表1(包含原始10w+房源信息)转化为DataFrame
    data1 = pd.DataFrame(list(info.find()))
    print(data1.head())
    #将数据表2(包含7k+小区经纬度信息)转化为DataFrame
    data2 = pd.DataFrame(list(location.find()))
    print(data2.head())
    #多表查询,以house_name为共同键,向表一合并,与mysql的查询功能类似,得到合并后的DataFrame
    result =pd.merge(data1,data2,on="house_name",how="left")
    print(result.head())
    
    
    • 好啦!所需的DataFrame格式的数据就成功且简单的得到了!
      可是,该怎么存进MongoDB呢,Mongo需要接受字典格式的数据才能传入啊~
      。。。。。
      作为边写简书边做的我真的折腾了好久也没找到很好又简单的方法,最后我用的完整代码如下
    import pymongo
    import pandas as pd
    
    #连接到数据库
    #连接到数据库
    client = pymongo.MongoClient("localhost",27017)
    lianjia = client["ershoufang"]
    info = lianjia["lianjia_info"]
    location = lianjia['location_info']
    
    #将数据表1(包含原始10w+房源信息)转化为DataFrame
    data1 = pd.DataFrame(list(info.find()))
    print(data1.head())
    #将数据表2(包含7k+小区经纬度信息)转化为DataFrame
    data2 = pd.DataFrame(list(location.find()))
    print(data2.head())
    #多表查询,以house_name为共同键,向表一合并,与mysql的查询功能类似,得到合并后的DataFrame
    result =pd.merge(data1,data2,on="house_name",how="left").drop(['_id_x','_id_y'],axis="columns")
    #衔接上面代码,用于插入数据库,遍历插入的,不知道有没有简单的办法啊~
    for i in range(len(result)):
        s = result.loc[i]
    #这里加了str()函数是无奈之举,DataFrame中的专有float64等数字格式使MongoDB无法识别,写入会报错,暂时先全部转换为字符串格式写入吧
        dic = {index:str(s[index]) for index in s.index}
        new_info.insert_one(dic)
        print(dic)
    
    • 然后总算勉强完成了,这对数据量不大就10w条数据来说效率还是挺高的,但总觉得这不是最佳办法,如果正好有懂的能看到这篇文章,欢迎提出,感激不尽啊~~

    相关文章

      网友评论

        本文标题:利用Pandas实现Mongodb的多表连接查询并将DataFr

        本文链接:https://www.haomeiwen.com/subject/gdnfmqtx.html