2012-05-14 11 views
26

Estoy empezando con Pandas y estoy leyendo en un archivo csv usando el método read_csv(). La dificultad que tengo es evitar que los pandas conviertan mis números de teléfono en números grandes, en lugar de mantenerlos como cadenas. Definí un convertidor que acababa de dejar los números solo, pero luego todavía se convirtieron en números. Cuando cambié mi convertidor para anteponer una 'z' a los números de teléfono, se quedaron cadenas. ¿Hay alguna forma de mantenerlos sin modificar los valores de los campos?Especificación del tipo de datos en el lector csv de Pandas

+2

Por favor, muéstranos tu código –

+3

@Gardner: has considerado aceptar una respuesta? –

Respuesta

13

Parece que no puede evitar que los pandas intenten convertir valores numéricos/booleanos en el archivo CSV. Eche un vistazo al código fuente de pandas para los analizadores IO, en particular las funciones _convert_to_ndarrays y _convert_types. https://github.com/pydata/pandas/blob/master/pandas/io/parsers.py

Siempre se puede asignar el tipo que desea después de haber leído el archivo:

df.phone = df.phone.astype(str) 
+1

Gracias @lbolla, esto ayudó en uno de mis correcciones de errores, donde un valor flotante se leyó como una cadena ya que otra columna era una cadena, y más tarde causó problemas en las funciones de agregación. Tenía que hacer df ['col'] = df ['col']. Astype (float64) –

28

Desde pandas 0.11.0 se puede utilizar dtype argumento para especificar explícitamente el tipo de datos para cada columna:

d = pandas.read_csv('foo.csv', dtype={'BAR': 'S10'}) 
+1

Tenga en cuenta que esto no está disponible (aún, con suerte) para algunas otras funciones de entrada, como 'pandas.read_fwf()' – ReneSac

+2

I revisado el tema y soporte para 'dtype' ya ha sido agregado a' pandas.read_fwf' :) – zero323

+0

Este método no funciona para conjuntos de datos grandes ¿hay alguna otra manera de leer un csv y solo columnas particulares? –

Cuestiones relacionadas