2012-07-10 12 views
15

He heredado un archivo de datos guardado en el formato Stata .dta. Puedo cargarlo con la función scikits.statsmodelsgenfromdta(). Esto coloca mis datos en una matriz NumPy de 1 dimensión, donde cada entrada es una fila de datos, almacenada en 24 tuplas.Construya eficientemente Pandas DataFrame a partir de la lista grande de tuplas/filas

In [2]: st_time = time.time(); initialload = sm.iolib.genfromdta("/home/myfile.dta"); ed_time = time.time(); print (ed_time - st_time) 
666.523324013 

In [3]: type(initialload) 
Out[3]: numpy.ndarray 

In [4]: initialload.shape 
Out[4]: (4809584,) 

In [5]: initialload[0] 
Out[5]: (19901130.0, 289.0, 1990.0, 12.0, 199.0, 18.0, 40301000.0, 'GB', 18242.0, -2.368063, 1.0, 1.7783716290878204, 4379.355, 66.17669677734375, -999.0, -999.0, -0.60000002, -999.0, -999.0, -999.0, -999.0, -999.0, 0.2, 371.0) 

Tengo curiosidad por saber si hay una forma eficiente de organizar esto en un Pandas DataFrame. Por lo que he leído, construir un DataFrame fila por fila parece bastante ineficiente ... ¿pero cuáles son mis opciones?

He escrito una primera pasada bastante lenta que simplemente lee cada tupla como un DataFrame de una sola fila y lo agrega. Me pregunto si se sabe que otra cosa es mejor.

+0

¿Tiene 'pandas.DataFrame (initialload)' devolver lo que está buscando? – eumiro

+0

Wow. Casi. Intentó algunos nombres de columna, pero puedo arreglarlo fácilmente. Loca. Gracias, nunca lo habría adivinado incluso después de leer los documentos de Pandas. Lo siento, esto fue muy simple. – ely

Respuesta

19

Si mi comentario respondió a su pregunta, mi respuesta no tiene que hacer comentarios al respecto más ... ;-)

pandas.DataFrame(initialload, columns=list_of_column_names) 
3

Versión 0.12 de pandas en adelante debería apoyar la carga de formato Stata directamente (Reference).

De la documentación:

La función read_stata de alto nivel va a leer un archivo de formato DTA y devolver una trama de datos: El StataReader clase leerá el encabezado del archivo DTA dada en la inicialización. Sus datos de método() leerán las observaciones, convirtiéndolos en una trama de datos que se devuelve:

pd.read_stata('stata.dta') 
Cuestiones relacionadas