Especificación de dtype float32 con pandas.read_csv en pandas 0.10.1

Estoy intentando leer un archivo simple separado por read_csv método pandas read_csv . Sin embargo, los pandas no parecen estar obedeciendo mi argumento dtype . ¿Tal vez lo estoy especificando incorrectamente?

He destilado mi llamada algo complicada a read_csv para este caso de prueba simple. De hecho, estoy usando el argumento de los converters en mi escenario “real”, pero lo eliminé por simplicidad.

A continuación se muestra mi sesión ipython:

 >>> cat test.out ab 0.76398 0.81394 0.32136 0.91063 >>> import pandas >>> import numpy >>> x = pandas.read_csv('test.out', dtype={'a': numpy.float32}, delim_whitespace=True) >>> x ab 0 0.76398 0.81394 1 0.32136 0.91063 >>> xadtype dtype('float64') 

También he intentado esto usando esto con un dtype de numpy.int32 o numpy.int64 . Estas elecciones dan como resultado una excepción:

 AttributeError: 'NoneType' object has no attribute 'dtype' 

Supongo que AttributeError se debe a que los pandas no intentarán convertir / truncar automáticamente los valores flotantes en un entero.

Estoy ejecutando en una máquina de 32 bits con una versión de Python de 32 bits.

 >>> !uname -a Linux ubuntu 3.0.0-13-generic #22-Ubuntu SMP Wed Nov 2 13:25:36 UTC 2011 i686 i686 i386 GNU/Linux >>> import platform >>> platform.architecture() ('32bit', 'ELF') >>> pandas.__version__ '0.10.1' 

0.10.1 realmente no soporta mucho float32

vea este http://pandas.pydata.org/pandas-docs/dev/whatsnew.html#dtype-specification

Puedes hacer esto en 0.11 así:

 # dont' use dtype converters explicity for the columns you care about # they will be converted to float64 if possible, or object if they cannot df = pd.read_csv('test.csv'.....) #### this is optional and related to the issue you posted #### # force anything that is not a numeric to nan # columns are the list of columns that you are interesetd in df[columns] = df[columns].convert_objects(convert_numeric=True) # astype df[columns] = df[columns].astype('float32') see http://pandas.pydata.org/pandas-docs/dev/basics.html#object-conversion Its not as efficient as doing it directly in read_csv (but that requires some low-level changes) 

He confirmado que con 0.11-dev, esto funciona (en 32 bits y 64 bits, los resultados son los mismos)

 In [5]: x = pd.read_csv(StringIO.StringIO(data), dtype={'a': np.float32}, delim_whitespace=True) In [6]: x Out[6]: ab 0 0.76398 0.81394 1 0.32136 0.91063 In [7]: x.dtypes Out[7]: a float32 b float64 dtype: object In [8]: pd.__version__ Out[8]: '0.11.0.dev-385ff82' In [9]: quit() vagrant@precise32:~/pandas$ uname -a Linux precise32 3.2.0-23-generic-pae #36-Ubuntu SMP Tue Apr 10 22:19:09 UTC 2012 i686 i686 i386 GNU/Linux 
 In [22]: df.a.dtype = pd.np.float32 In [23]: df.a.dtype Out[23]: dtype('float32') 

lo anterior funciona bien para mí bajo pandas 0.10.1