我想從SQL(使用pyodbc)讀取一些數據到一個numpy結構數組(我相信結構化數組是由於多個dtypes)。閱讀數據到結構化數組與多個dtypes
import pyodbc
import numpy as np
cnxn = pyodbc.connect('DRIVER={SQL Server};Server=SERVER;Database=DB;Trusted_Connection=Yes;')
cursor = cnxn.cursor()
sql_ps = "select a, b from table"
cursor.execute(sql_positions)
p_data = cursor.fetchall()
cnxn.close
ndtype = np.dtype([('f1','>f8'),('f2','|S22')])
p_data = np.asarray(p_data, dtype=ndtype)
然而,這將返回:
TypeError: expected a readable buffer object
如果我加載到陣列作爲元組
p_data_tuple = np.asarray([tuple(i) for i in p_data], dtype=ndtype)
它的工作原理,但是p_data_tuple
是元組的陣列,而不是一個二維數組,意思是我不能調用使用的元素p_data_tuple[0,1]
是否有任何我知道如何將數據直接返回到具有多個dtypes的str數組中,或者將元組數組轉換成多個dtypes的二維數組或其他解決方案?
感謝
如果通過pandas運行查詢會發生什麼情況:'df = pd.read_sql_query(sql_ps,cnxn)' – Colin
我可以採用該方法,然後使用'p_data_2 = df.asmatrix(['a' ,'b'])'但似乎沒有讓我指定dtype,而'p_data_2'將是'object'。 – pj87
*「它可行,但是p_data_tuple是一個元組數組,與2d數組相反,這意味着我無法使用p_data_tuple [0,1]調用元素」*這就是您在創建結構化數組時所發生的情況。它將是一個*一維*結構數組。如果結構中字段的數據類型不完全相同,那麼*不能*以二維數組的形式訪問它。 –