如何将熊猫数据帧的索引 dtype 更改为 int32



数据帧索引的默认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文档中所述:

RangeIndexInt64Index有限的内存保存特例 表示单调范围。在某些情况下使用RangeIndex 实例提高计算速度。

相关内容

最新更新