在Pandas中处理Windows numpy astype(int)错误



我有一个代码库,我一直在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(请参阅来源(。

最新更新