我有一个代码库,我一直在Mac上开发(并在Linux机器上运行(,主要基于panda(因此是numpy(。我通常使用astype(int)
键入cast。
最近,一位基于Windows的开发人员加入了我们的团队。为了使代码库更加独立于平台,我们试图巧妙地解决这个棘手的问题,即numpy使用32位类型而不是64位类型,后者会破坏较长的整数。
在Mac上,我们看到:
ipdb> ids.astype(int)
id
1818726176 1818726176
1881879486 1881879486
2590366906 2590366906
284399109 284399109
299981685 299981685
370708200 370708200
387277023371 387277023371
387343898032 387343898032
406885699892 406885699892
5262665206 5262665206
544687374 544687374
6978317806 6978317806
而在Windows计算机上(在PowerShell中(,我们看到:
ipdb> ids.astype(int)
id
1818726176 1818726176
1881879486 1881879486
2590366906 -1704600390
284399109 284399109
299981685 299981685
370708200 370708200
387277023371 729966731
387343898032 796841392
406885699892 -1136193228
5262665206 967697910
544687374 544687374
6978317806 -1611616786
除了使用sed
调用将每个astype(int)
更改为astype(np.int64)
(这也需要在当前不存在的每个模块的顶部都有一个import numpy as np
(之外,还有什么方法可以做到这一点吗?
特别是,我希望以熊猫选项或其他方式将int映射到numpy.int64。
谢谢!
我并不是说这是一个非常好的主意,但您可以简单地将int
重新定义为您想要的任何内容:
import numpy as np
x = 2384351503.0
print(np.array(x).astype(int))
#-2147483648
old_int = int
int = np.int64
print(np.array(x).astype(int))
#2384351503
int = old_int
print(np.array(x).astype(int))
#-2147483648
然而,在您描述的情况下,强烈希望修复源代码,而不是重新定义标准数据类型。这是一次性的工作,任何IDE都可以轻松完成。
Numpy
已经被熊猫隐含地导入,所以它不需要花费任何额外的时间或资源。如果您真的想避免它(无论出于何种原因(,可以使用pd.Int64Dtype.type
而不是np.int64
(请参阅来源(。