PyMongo を使用して Pandas データ フレームを MongoDB に挿入する

Hira Arif 2023年6月21日
PyMongo を使用して Pandas データ フレームを MongoDB に挿入する

MongoDB は、データを格納およびクエリするための柔軟な JSON のようなドキュメントをサポートする、オープンソースのドキュメント指向データベースです。 JavaScript でクエリを表現できる、動的でスキームのないクエリ言語 (DQL) を使用します。

変化するデータへの高速アクセスを必要とするアプリケーションのバックエンド データベースとして MongoDB を設計することができ、展開は Web アプリや API として時間の経過とともに変化します。

Pandas データ フレームは、Excel のテーブルや行と列を持つデータベースなど、データ分析とデータ操作に使用される Python データ構造のクラスです。 このチュートリアルでは、PyMongo を使用して Pandas データ フレームを MongoDB に挿入する方法について説明します。

PyMongo を使用して Pandas データ フレームを MongoDB に挿入する

pandas データ フレームを MongoDB に挿入するには、以下の Python ライブラリをインストールする必要があります。

  1. パンダ

    PS C:\> pip install pandas
    
  2. json

    PS C:\> pip install json
    
  3. ピモンゴ

    PS C:\> pip install pymongo
    

以下のコードを実行して client を作成しましょう。

コード例 (demo.py に保存):

from pymongo import MongoClient


def create_connection():
    connection = None
    try:
        connection = MongoClient("mongodb://localhost:27017/")
        print("Connection made!!")
    except Exception as e:
        print(e)
    return connection


client = create_connection()

Python パッケージ pymongo からクラス MongoClient をインポートします。 上記の関数 create_connection() は、そのクラスを使用して、MongoDB サーバーをポート番号 27017 でローカルに接続することにより 接続 を作成します。

次に、connectionclient に返します。 db という名前のデータベースを作成する以下のコードを実行してみましょう。

コード例 (demo.py に保存):

def create_database(client, db_name):
    db = None
    try:
        db = client[db_name]
        print(f"Database {db_name} created!!")
    except Exception as e:
        print(e)
    return db


db_name = "companyDB"  # name of your database
db = create_database(client, db_name)

関数 create_database() は、clientdb_name を引数として取り、db という名前のデータベースを作成します。 エラーが発生した場合、この関数はプログラムを中断することなく Exception を出力します。

それでは、以下のコードを実行して collection を作成しましょう。

コード例 (demo.py に保存):

def create_collection(db, collection_name):
    collection = None
    try:
        collection = db[collection_name]
        print(f"Collection {collection_name} created!!!")
    except Exception as e:
        print(e)
    return collection


collection_name = "startups"  # name of your collection
collection = create_collection(db, collection_name)

上記の関数 create_collection() を使用して、提供されたデータベースで指定された名前の コレクション を作成します。 これにより、Pandas Data Frame を MongoDB に挿入できます。

以下のコードは、作成された collection に Pandas Data Frame を挿入します。

コード例 (demo.py に保存):

import json
import pandas as pd


def insert_records(collection, records):
    rows = None
    try:
        rows = collection.insert_many(records)
        print(f"{len(rows.inserted_ids)} records added successfully")
    except Exception as e:
        print(e)
    return rows


df_file = "50_Startups.csv"
df = pd.read_csv(df_file)

records = json.loads(df.T.to_json()).values()
insert_records(collection, records)

pandas データ フレームを MongoDB に挿入するには、まず、pandas ライブラリを使用してそれを読み取る必要があります。 デフォルトでは、MongoDB は JSON 形式のファイルをサポートしているため、to_json() 関数を使用してデータ フレームをサポートされている形式に変換する必要があります。

関数 insert_records() は、dbcollection_name、および変換されたデータ フレーム records を引数として取り、それらを collection に挿入します。 insert_many() 関数を使用して、一度に複数のレコードを挿入します。

最後に、データ フレームをデータベースに挿入したので、以下のコードを実行して接続を閉じる必要があります。

コード例 (demo.py に保存):

# Close Connection
def close_connection(client):
    if client:
        client.close()
        print("Connection closed!!")


close_connection(client)

関数 close_connection()client.close() 関数を使用して、接続が存在する場合はそれを閉じます。

次に、Python ファイル demo.py を次のように実行します。

PS C:>python demo.py

出力 (コンソールに出力):

コンソール出力

一方、MongoDB に挿入されるデータ フレームは以下のとおりです。

データベース出力