将 numpy 数组从 int64 类型更改为 int32 类型会破坏数据

changing numpy array from type int64 to type int32 corrupts the data

我正在使用 pandas 的非常大的数据集,为了减少内存使用,我将所有列从 float64 转换为 float32,从 int64 转换为 int32。 其中一列是以纳秒为单位的时间戳(类似于 1594686594613248)。在铸造之前,它只有正值。铸造后,它主要具有负值。 astype('int32') 有什么错误吗?我在这里错过了什么。

相关代码:

data_uid_label = pd.read_csv('label_to_uid.csv')
types = data_uid_label.dtypes
for name in data_uid_label.columns:
    if(types[name]=='float64'):
        data_uid_label[name]=data_uid_label[name].astype('float32')
    if(types[name]=='int64'):
        data_uid_label[name]=data_uid_label[name].astype('int32')

谢谢

1594686594613248 需要 51 位来表示,因此它适合 64 位数字 (int64),但不适用于 32 位数字 (int32)。溢出:

  • 第32个剩下的所有位都被截断,即。扔掉,导致完全不同(更小)的值
  • 由于整数的内部表示,新的最左边的位(第 32 位)确定数字是正数还是负数,因此您得到的结果是负数

仅投射您确定不包含对于较小类型来说太大的值的列。大多数时候,只要您没有数百万个数据点,即使是最小的内存增益也不值得。

该值超过 int32 的限制。

int32 的限制是整数(-2147483648 到 2147483647)(< 1594686594613248,您的值)。因此,您得到的值不正确。 Refer here.