Accessからデータを取得して、きちんとしたデータフレームに入れるために、さまざまなことを試しました。現在、私のコードは次のようになっています。
from pandas import DataFrame
import numpy as np
import pyodbc
from sqlalchemy import create_engine
db_file = r'C:\Users\username\file.accdb'
user = 'user'
password = 'pw'
odbc_conn_str = 'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=%s;UID=%s;PWD=%s' % (db_file, user, password)
conn = pyodbc.connect(odbc_conn_str)
cur = conn.cursor()
qry = cur.execute("SELECT * FROM table WHERE INST = '796116'")
dataf = DataFrame(qry.fetchall())
print(dataf)
これにより、データがデータフレームに配置されますが、2番目の行はリストです。以下のスニペットは、リスト付きの2つではなく、4つの別々の列に配置する必要があります。
0 (u'RM257095', u'c1', u'796116')
1 (u'RM257097', u'c2', u'796116')
2 (u'RM257043', u'c3', u'796116')
3 (u'RM257044', u'c4', u'796116')
Read_query関数を持つkdb_utilsのようなモジュールを使用し、kdbからデータを取得して、きちんとしたデータフレームに分割しました。データにアクセスしたり、データをプルしてデータフレームにきちんと配置したりするためのこのようなものはありますか?
パンダの直接 read_sql メソッドの使用を検討してください:
import pyodbc
import pandas as pd
...
cnxn = pyodbc.connect('DRIVER={{Microsoft Access Driver (*.mdb, *.accdb)}};DBQ=' + \
'{};Uid={};Pwd={};'.format(db_file, user, password)
query = "SELECT * FROM mytable WHERE INST = '796116'"
dataf = pd.read_sql(query, cnxn)
cnxn.close()