python读取mongodb数据,并转成pandas的dataframe

import asyncio
from motor.motor_asyncio import AsyncIOMotorClient
import pandas as pd
import nest_asyncio
nest_asyncio.apply()

def client_database(address,port,database):
    client = AsyncIOMotorClient(address,port)
    db = client[database]
    return db

async def do_find(db,collection):
    cursor = db[collection].find()
    count = []
    async for document in cursor:
        print(list(document.keys()))
        count.append(document)
    dataframe = pd.DataFrame(count)
    dataframe.set_index('_id',inplace=True)
    dataframe.to_csv('dataframe.csv') #保存CSV
    return dataframe

if __name__ == '__main__':
    address = '127.0.0.1' #地址
    port = 27017 #端口
    database = 'MachineLearning' #数据库名字
    collection = 'Movie' #集合名字
    db = client_database(address, port, database)
    loop = asyncio.get_event_loop()
    dataframe = loop.run_until_complete(do_find(db, collection))

我觉得在字典数据转成dataframe,这一点上,应该有很大的优化空间。

方法1:把多个字典转成pandas的dataframe的时候,是一直读取字典数据,把字典全部添加到列表里面然后转成dataframe比较好?【数据量大时候在考虑列表内存会不会溢出呢?】

方法2:还是直接定义一个空字典,把然后把读取到字典转成dataframe,一直读一直拼接到空字典上面,还是这种比较好?【频繁的创建和转换与拼接、也许更加耗IO?】

方法3:在方法1基础上,是否存在比列表更好的数据结构?或者说给列表设置上限、到达上限之后缓存一下然后多次操作之后把多个列表转成array再组合然后转成dataframe(或者不转成array直接转成dataframe?)?

猜你喜欢

转载自blog.csdn.net/qq_42658739/article/details/104595742
今日推荐