¿Cómo cambiar el tipo de índice de pandas DataFrame a int32?

Un dtype predeterminado del índice DataFrame es int64 y me gustaría cambiarlo a int32 .

Intenté cambiarlo con pd.DataFrame.set_index y NumPy array de int32 , también intenté crear un nuevo índice con dtype=np.int32 . No funcionó, devolviendo siempre el índice de int64 .

¿Alguien puede mostrar un código de trabajo para producir un índice de Pandas con tamaño int32 ?

Yo uso conda Pandas v0.20.1.

No estoy seguro de que esto sea algo que valga la pena hacer en la práctica, pero lo siguiente debería funcionar:

 class Int32Index(pd.Int64Index): _default_dtype = np.int32 @property def asi8(self): return self.values i = Int32Index(np.array([...], dtype='int32')) 

(desde aquí )

Todas las rutas de código que pude encontrar, coaccionan el dtype:

Compruebe en pandas.Index.__new__()

 if issubclass(data.dtype.type, np.integer): from .numeric import Int64Index return Int64Index(data, copy=copy, dtype=dtype, name=name) 

Esto permite pasar un dtype, pero en NumericIndex().__new__() tenemos:

 if copy or not is_dtype_equal(data.dtype, cls._default_dtype): subarr = np.array(data, dtype=cls._default_dtype, copy=copy) 

Lo que cambia el dtype.

¿Alguien puede mostrar un código de trabajo para producir un índice de pandas con tamaño int32?

La respuesta de @PietroBattiston puede funcionar. Pero vale la pena explicar por qué normalmente no debería reemplazar el RangeIndex predeterminado con un índice Int64 / Int32 .

Almacenar la lógica detrás de un rango de valores requiere menos memoria que almacenar cada entero en un rango. Esto debería quedar claro cuando compara, por ejemplo, el range incorporado de Python con NumPy np.arange . Como se describe en los documentos pd.RangeIndex :

RangeIndex es un caso especial de ahorro de memoria de Int64Index limitado a representar rangos monótonos. El uso de RangeIndex puede, en algunos casos, mejorar la velocidad de cálculo.