type dtype convert column change cast astype python numpy int pandas type-conversion

python - dtype - NumPy o Pandas: Mantener el tipo de matriz como un número entero mientras tiene un valor de NaN



pandas change column dtype to int (3)

Esta no es una solución para todos los casos, pero la mía (coordenadas genómicas) he recurrido al uso de 0 como NaN

a3[''MapInfo''] = a3[''MapInfo''].fillna(0).astype(int)

Esto al menos permite que se use el tipo de columna "nativo" adecuado, operaciones como la resta, la comparación, etc. funcionan como se esperaba

¿Hay alguna forma preferida de mantener el tipo de datos de una matriz numpy fija como int (o int64 o lo que sea), mientras que todavía tiene un elemento dentro enumerado como numpy.NaN ?

En particular, estoy convirtiendo una estructura de datos interna en un FrameFrame de Pandas. En nuestra estructura, tenemos columnas de tipo entero que todavía tienen NaN (pero el tipo de la columna es int). Parece que se ha vuelto a crear todo como un flotante si hacemos de esto un DataFrame, pero nos gustaría ser int .

¿Pensamientos?

Cosas probadas:

Intenté usar la función from_records() en pandas.DataFrame, con coerce_float=False y esto no ayudó. También intenté usar matrices enmascaradas NumPy, con NaN fill_value, que tampoco funcionó. Todo esto hizo que el tipo de datos de columna se convirtiera en un flotante.


Si el rendimiento no es el problema principal, puede almacenar cadenas en su lugar.

df.col = df.col.dropna().apply(lambda x: str(int(x)) )

Luego puedes mezclar con NaN todo lo que quieras. Si realmente desea tener enteros, según su aplicación, puede usar -1 , 0 , o 1234567890 , o algún otro valor dedicado para representar NaN .

También puede duplicar temporalmente las columnas: una como lo ha hecho, con flotadores; el otro experimental, con enteros o cuerdas. Luego inserta asserts en cada lugar razonable comprobando que los dos están sincronizados. Después de suficientes pruebas puedes soltar las carrozas.


NaN no se puede almacenar en una matriz de enteros. Esta es una limitación conocida de los pandas en este momento; He estado esperando que se hagan progresos con los valores de NA en NumPy (similar a NA en R), pero pasarán al menos 6 meses a un año antes de que NumPy obtenga estas características, al parecer:

http://pandas.pydata.org/pandas-docs/stable/gotchas.html#support-for-integer-na