2011-05-05 33 views

Respuesta

1

Si quería los nombres de columna como la primera línea en la matriz, que haría

top = csr.execute("Select * from bigtop") 
d=list(top) 
a = np.asarray([[x[0] for x in top.description]] + d, dtype='object') 

y conseguir algo como

array([[heading1, heading2, heading3, ...], 
     [val1, val2, val3, ...], 
      ... 
      , dtype=object) 
+1

pero me gusta la idea de lafrasu de poner los nombres de los encabezados en los nombres de los tipos, a los que se puede acceder como 'a.dtype.names'. Luego puede indexar las columnas por número * o * nombre en el código. –

2

csr.description deberían tener las cabeceras

+0

I Creo que debería ser 'top.description', en este caso. –

+0

y, ¿cómo puedo obtener esos datos en numpy? – Merlin

+0

No estoy seguro de lo que quieres decir exactamente con "entiéndelo" (son solo los tipos de datos, ¿no?), Pero creo que 'np.asarray (top.description) .T [0]' hará lo que querer. –

4

Este es un auto ejemplo que ilustra la idea general contenida. numpy.recarray es su amigo,

from sqlite3 import connect 
from numpy import asarray 

db = connect(":memory:") 
c = db.cursor() 
c.execute('create table bigtop (a int, b int, c int)') 

for v in [(1,2,3),(4,5,6),(7,8,9)]: 
    c.execute('insert into bigtop values (?,?,?)',v) 

s = c.execute('select * from bigtop') 

h = [(i[0],int) for i in c.description] 

# You can also use 'object' for your type 
# h = [(i[0],object) for i in c.description] 

a = asarray(list(s),dtype=h) 

print a['a'] 

da la primera columna,

[1 4 7] 

y,

print a.dtype 

da el nombre y tipo de cada columna,

[('a', '<i4'), ('b', '<i4'), ('c', '<i4')] 

alternativamente si usaste object como su tipo, se obtiene,

[('a', '|O4'), ('b', '|O4'), ('c', '|O4')] 
+1

Al igual que una idea de último momento, es posible que desee considerar algo como [pytables] (http://www.pytables.org/moin) o [h5py] (http://code.google.com/p/h5py/) si Desea almacenar datos de tipo numérico. Específicamente si quieres compatibilidad 'numpy'. – lafras

+0

@ user428862: Es correcto, la primera columna de la tabla. – lafras

+0

@lafrasu. pls leen la q de nuevo. Quiero los encabezados Sql como parte de la matriz. En ur ex. sería a, b, c – Merlin