Python {Article003}

ようこそ「Python」へ...

MS AccessのデータベースをPython Pandasに取り込むには【Python】

ここではPythonを使用してMicrosoft AccessのデータベースをPandasに取り込む手順を解説します。 AccessのデータベースをPandasのData Frameに取り込むと、Accessと同様にデータの絞り込み、並べ替え、編集といった操作を簡単に行うことができます。 また、Pandasに取り込んだデータをMatplotlibを使用してグラフに表示して視覚化して分析することも簡単に行うことができます。 なお、AccessのデータベースをPandasに取り込むには、Accessのベースベースに接続するためにPyodbcも必要になります。

説明文の左側に図の画像が表示されていますが縮小されています。 画像を拡大するにはマウスを画像上に移動してクリックします。 画像が拡大表示されます。拡大された画像を閉じるには右上の[X]をクリックします。 画像の任意の場所をクリックして閉じることもできます。

Pyodbc、Pandasをインストール(Windows 10)

  1. Windowsのコマンドプロンプトを開く

    click image to zoom!
    図1
    Windowsの「スタート」ボタンをクリックしたら「Windows システム ツール」をクリックして展開します。 そして、「コマンドプロンプト」をクリックします。これでコマンドプロンプトのウィンドウが開きます。
  2. Pyodbc、Pandasをインストールする

    cd C:\Users\XPS8910\AppData\Local\Programs\Python\Python39-32\Scripts
    pip install pyodbc
    pip install pandas
    
    click image to zoom!
    図2
    コマンドプロンプトに「cd C:\Users\...\Python39-32\Scripts」をコピペ(Copy & Paste)してリターンを押します。 次に「pip install pyodbc」入力してPyodbcモジュールをインストールします。 インストールが完了すると「Successfully installed pyodbc...」が表示されます。 次に「pip install pandas」を入力してPandasモジュールをインストールします。 インストールが完了すると「Successfully installed pandas...」が表示されます。

AccessのデータベースをPandasに取り込む

  1. AccessのCategoryテーブルをPandasに取り込む

    Visual Studio Code(VSC)を起動したら、以下のPythonのコードを入力して実行します。 VSCをまだインストールしていないときは、「記事(Article001)」をクリックしてインストールしてください。 行1-2では、PyodbcとPandasのモジュールを取り込んでいます。 行10-13では、Accessの「Stats.accdb」データベースの接続文字列を定義しています。 AccessのデータベースはPythonのプログラムが格納されている直下のサブフォルダ「data\db\article003\Stats.accdb」に格納されています。 Accessのデータベースが異なるデバイスに格納されているときは行4-7のような形式で接続文字列を定義します。 行16ではPyodbcのconnect()メソッドを実行してAccessのデータベースを接続(開く)しています。 行18では「Stats.accdb」データベースのCategoryテーブルからすべてのレコードを抽出するSQLコマンド(SELECT)を記述しています。 Categoryテーブルからレコードを絞り込むときは、行19のようにSELECTコマンドに「WHERE」句を追加します。 行20では、Pandasのread_sql()メソッドを実行してCategoryテーブルからすべてのレコードを取り込んでDataFrameに格納します。 行21では、Accessのデータベースを切断(閉じる)しています。 行22では、PandasのDataFrameのタイプを表示しています。 行23では、PandasのDataFrameの内容を表示しています。
    import pyodbc as pyo
    import pandas as pd
    
    #con_str = (
    #	r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};'
    #	r'DBQ=C:\User\PythonProject\data\Stats.accdb;'
    #	)
    
    # Access DB Connection String
    con_str = (
    	r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};'
    	r'DBQ=data/db/article003/Stats.accdb;'
    	)
    
    # Connect Access DB Stats.accdb
    con = pyo.connect(con_str)
    
    sql = 'SELECT * FROM Category'
    #sql = "SELECT * FROM Category WHERE CategoryName='Access' OR CategoryName='jQuery' OR CategoryName='Python'"
    df = pd.read_sql(sql, con)
    con.close()
    print(type(df))
    print(df) 
    click image to zoom!
    図3
    実行結果(図3)にPandasのDataFrameのタイプとデータが表示されます。 図3と図4を比較して分かるようにAccessのCategoryテーブルがPandasのDataFrameに正常に取り込まれたことが確認できます。
    click image to zoom!
    図4
    図4は、Accessを起動して「Stats.accdb」データベースのCategoryテーブルを表示したときの画像です。
  2. PandasのDataFrameのフィールドとデータ型を確認する

    Visual Studio Codeから「df.info()」を入力して実行します。
    df.info()
    click image to zoom!
    図5
    実行結果(図5)としてDataFrameのフィールド名とデータ型が表示されます。 「ID」、「ViewCount」はint64型、「Category」「Notes」はobject型(str型)、「ExcludeMe」はbool型、「DateAdded」はdatetime64型として表示されています。 AccessのCategoryテーブルのデータ型と類似していることが確認できます。
  3. DataFrameの先頭・終端のレコードを1件ずつ表示する

    Visual Studio Codeから以下のコードを入力して実行します。 「df.head()」はDataFrameの先頭レコードを1件表示します。 「df.tail(1)」はDataFrameの終端レコードを1件表示します。
    print(df.head(1))
    print(df.tail(1))
    
    click image to zoom!
    図6
    図6は実行結果です。
  4. DataFrameのレコードをフォーマットして表示する

    Visual Studio Codeから以下のコードを入力して実行します。 forループではDataFrameのiterrows()メソッドですべてのレコードを抽出して変数rowに1レコード毎に格納しています。 そしてprintでレコードのフィールドをフォーマットして表示しています。
    for index, row in df.iterrows():
    	#print(index, row)
       	print(f'{index}, Category Name={row.CategoryName}, View Count={row.ViewCount}, ExcludeMe={row.ExcludeMe}, Date Added={row.DateAdded}')
    
    click image to zoom!
    図7
    図7は実行結果です。