DataFrame索引的默认dtype为int64
,我想将其更改为int32
。
我尝试使用pd.DataFrame.set_index
和NumPy int32
数组进行更改,并尝试使用dtype=np.int32
创建新索引。它没有用,总是返回int64
的索引。
有人可以显示工作代码来生成int32
大小的Pandas索引吗?
我使用conda Pandas v0.20.1。
答案 0 :(得分:2)
不确定这是否值得在实践中做,但以下情况应该有效:
class Int32Index(pd.Int64Index):
_default_dtype = np.int32
@property
def asi8(self):
return self.values
i = Int32Index(np.array([...], dtype='int32'))
(来自here)
答案 1 :(得分:1)
我找到的所有代码路径都强制执行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。
答案 2 :(得分:1)
有人可以显示一个工作代码来生成带有int32的熊猫索引 大小?
@PietroBattiston's answer可能有效。但是值得解释一下为什么通常不要用RangeIndex
/ Int64
索引替换默认的Int32
。
将逻辑存储在一个值范围内比在一个范围内存储每个整数占用更少的内存。例如,将Python的内置range
与NumPy np.arange
进行比较时,这应该很清楚。如pd.RangeIndex
docs中所述:
RangeIndex
是Int64Index
有限的节省内存的特例 代表单调范围。在某些情况下使用RangeIndex
实例可以提高计算速度。