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