数据帧索引的默认dtype是int64
,我想将其更改为int32
。
我尝试用pd.DataFrame.set_index
和 NumPy 数组int32
更改它,也尝试使用 dtype=np.int32
创建新索引。它不起作用,总是返回int64
的索引。
有人可以显示工作代码来生成int32
大小的熊猫索引吗?
我使用 conda 熊猫 v0.20.1。
不确定这在实践中是否值得做,但以下方法应该有效:
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的答案可能有效。但值得解释的是,为什么您通常不希望将默认RangeIndex
替换为 Int64
/Int32
索引。
值范围背后的逻辑比存储范围中的每个整数占用的内存更少。例如,当您将Python的内置range
与NumPy np.arange
进行比较时,这一点应该很清楚。如pd.RangeIndex
文档中所述:
RangeIndex
是Int64Index
有限的内存保存特例 表示单调范围。在某些情况下使用RangeIndex
实例提高计算速度。