Pythonはmongodbデータを読み取り、それをpandasデータフレームに変換します

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))

辞書データをデータフレームに変換するときは、最適化の余地がたくさんあるはずだと思います。

方法1:複数の辞書をパンダのデータフレームに変換する場合、辞書データを常に読み取り、すべての辞書をリストに追加してから、データフレームに変換する方がよいでしょうか。[データ量が多いとリストメモリがオーバーフローしますか?

方法2:または、空の辞書を直接定義してから、読み取った辞書をデータフレームに変換し、読み取りを続けて空の辞書に接続しますか、それともこれが優れていますか?[頻繁な作成、変換、スプライシング、おそらくより多くのIOを消費しますか?

方法3:方法1に基づいて、リストよりも優れたデータ構造はありますか?または、リストの上限を設定し、上限に達した後にキャッシュし、複数のリストを配列に変換し、複数の操作の後にデータフレームに結合します(または配列に変換せずに直接データフレームに結合しますか?)?

おすすめ

転載: blog.csdn.net/qq_42658739/article/details/104595742