Pandas读取MongoDB数据的另一种方式

浏览: 3515

之前介绍了在Pandas中读取MongoDB数据的方法,在索引出数据之后,将结果转换为列表list,然后在传入一个pandas的DataFrame中。

import pymongo
import pandas as pd
 
# 设置MongoDB连接信息
client = pymongo.MongoClient('localhost',27017)
cn_78 = client['cn_78']
project_info = cn_78['project_info']
 
data = pd.DataFrame(list(project_info.find()))
# 删除mongodb中的_id字段
del data['_id']
# 选择需要显示的字段
data = data[['aear','cate','subcate','name','maxmoney','minmoney','time']]
print(data)

image.png

这种方法很简单,但是有一个问题,就是在数据量大的时候,会大量的占用内存以及耗费时间,如果在内存不大的单机上进行操作,可能因为内存而导致主机崩溃。所以只适合少量数据下的使用。

今天介绍一个适合大量数据的方法,没有使用list列表转换来得方便,但是快速以及占用机器内存小。

第一步,编写好查询语句:

import pymongo
import pandas as pd
import csv
 
df = data.find(
        {
            'pay_time':{'$regex':'2014-.*'},
            'shop_name':'官方旗舰店',
            'status':'已确认',
           '$or':[ {'pro_name':{'$regex':'.*特价.*'}},{'pro_name':{'$regex':'.*促销.*'}},{'pro_name':{'$regex':'.*优惠.*'}}]
        },
        {
            '_id':0,
        }
    )
 

image.png

第二步,新建一个csv文件,遍历mongoDB的查询,并写入csv文件中:

with open('data.csv','w',encoding='utf-8',newline='') as files:
    csvfiles = csv.DictWriter(files,fieldnames=['pay_time','send_num'])
    csvfiles.writeheader()
    n = 1
    for i in df:
    # print(i)
        print('第{0}条'.format(n))
        csvfiles.writerow({'pay_time':i['pay_time'],'send_num':i['send_num']})
        n += 1

image.png

第三步,使用pandas进行读取

使用pandas读取csv文件直接使用read_csv()方法即可。

12data = pd.read_csv('data.csv') 

或是留作他用。

虽然需要进行三个步骤,但是在查询数据量大的情况下,所消耗的时间并不比直接进行list转换要多,多数情况下,都会很快的完成查询和写入。

最后,记得关闭数据库:

12db.close() 

养成好习惯。

推荐 4
本文由 州的先生 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册