2012-03-14 11 views
7

Tengo algunos archivos de texto con el siguiente formato:¿Cómo especificar dtype cuando se usa pandas.read_csv para cargar datos de archivos csv?

000423|东阿阿胶|  300|1|0.15000|   | 
000425|徐工机械|  600|1|0.15000|   | 
000503|海虹控股|  400|1|0.15000|   | 
000522|白云山A|  |2|  | 1982.080| 
000527|美的电器|  900|1|0.15000|   | 
000528|柳 工|  300|1|0.15000|   | 

cuando uso read_csv a cargarlos en trama de datos, no se genera dtype correcta para algunas columnas. Por ejemplo, la primera columna se analiza como int, no unicode str, la tercera columna se analiza como unicode str, no int, debido a que faltan datos ... ¿Hay alguna manera de preestablecer el tipo de DataFrame, al igual que numpy.genfromtxt hace?

actualizaciones: que utilizan read_csv como ésta, que causó el problema:

data = pandas.read_csv(StringIO(etf_info), sep='|', skiprows=14, index_col=0, 
         skip_footer=1, names=['ticker', 'name', 'vol', 'sign', 
         'ratio', 'cash', 'price'], encoding='gbk') 

Con el fin de resolver los problemas tanto en el tipo D y codificación, necesito utilizar unicode() y numpy.genfromtxt primera:

etf_info = unicode(urllib2.urlopen(etf_url).read(), 'gbk') 
nd_data = np.genfromtxt(StringIO(etf_info), delimiter='|', 
         skiprows=14, skip_footer=1, dtype=ETF_DTYPE) 
data = pandas.DataFrame(nd_data, index=nd_data['ticker'], 
         columns=['name', 'vol', 'sign', 
           'ratio', 'cash', 'price']) 

Sería bueno si read_csv puede agregar dtype y usecols configuraciones. Perdón por mi avaricia^_^

+3

De hecho, se necesita algo más de trabajo en los lectores de archivos. Vea aquí: https://github.com/pydata/pandas/issues/926. Con suerte, un desarrollador mágico saldrá de la carpintería y me ayudará con esto. –

Respuesta

4

En pocas palabras: no, todavía no. Se necesita más trabajo (léase: desarrolladores más activos) en esta área en particular. Si pudieras publicar cómo estás usando read_csv, podría ser útil. Sospecho que el espacio en blanco entre las barras puede ser el problema

EDITAR: esto ahora está obsoleto. Este comportamiento está cubierto de forma nativa por read_csv

+1

Gracias Wes. Acabo de ver el video de PyCon sobre análisis de datos en Python con pandas de youtube. ¡Gran ayuda! – Deadwood

1

Ahora puede usar dtype en read_csv.

PD: Felicitaciones a Wes McKinney por responder, se siente bastante incómodo para contradecir el "pasado Wes".

Cuestiones relacionadas