Как изменить индекс 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может в некоторых экземпляры улучшают скорость вычислений.