Как изменить индекс dtype фрейма данных pandas на int32?

dtype индекса фрейма данных по умолчанию -int64 и я хотел бы изменить его на int32.

Я попытался изменить его с pd.DataFrame.set_index и NumPy массив int32, также попытался сделать новый индекс с dtype=np.int32. Это не сработало, всегда возвращая индекс int64.

может ли кто-нибудь показать рабочий код для создания индекса панды с помощью int32 размер?

Я использую conda Pandas v0.20.1.

3 ответов


Не уверен, что это стоит делать на практике, но должно работать следующее:

class Int32Index(pd.Int64Index):
    _default_dtype = np.int32

    @property
    def asi8(self):
        return self.values

i = Int32Index(np.array([...], dtype='int32'))

(от здесь)


все пути кода, которые я мог найти, заставить dtype:

Регистрация pandas.Index.__new__()

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

Это позволяет передавать dtype, но в NumericIndex().__new__() у нас есть:

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

который изменяет dtype.


может кто-нибудь показать рабочий код для создания индекса панды с int32 размер?

@PietroBattiston это!--15--> может работать. Но это стоит объяснить, почему вы должны обычно не хотите заменить значение по умолчанию RangeIndex с Int64 / .

сохранение логики за диапазоном значений занимает меньше памяти, чем сохранение каждого целого числа в диапазоне. Это должно быть ясно, когда вы сравниваете, например, Встроенный Python range операций с numpy np.arange. Как описано в pd.RangeIndex docs:

RangeIndex - Это особый случай сохранения памяти Int64Index общества для представления монотонных диапазонов. Используя RangeIndex может в некоторых экземпляры улучшают скорость вычислений.