[英]Interpreting numpy.int64 datatype as native int datatype in Python on windows x64
背景:
我在机器学习案例中执行代码时遇到问题。 我已经通过一个丑陋的解决方法解决了这个问题,因此我能够执行笔记本,但是我仍然不完全了解问题的原因。
当我尝试执行以下代码(使用sklearn的OneHotEncoder创建虚拟变量) 时 ,就会出现问题。
categorical_columns = ~np.in1d(train_X.dtypes, [int, float])
尽管代码执行时没有任何错误,但是它无法将numpy.int64识别为int数据类型,因此将所有int64数据类型的列归类为分类并将其解析为OneHotEncoder。
train_X
是具有以下列和数据类型的pandas数据train_X
对象,如您所见,整数存储为numpy.int64。
该代码最初是在Mac上的Jupyter Notebook中编写的,可以正常工作,并且还可以在Google云上的Colaboraty中正常运行。 所有其他尝试在几乎相同的Windows计算机上从Jupyter运行代码的人都遇到了与运行脚本时相同的问题。
问题:
似乎在Windows计算机上,numpy.int64未链接到本机int数据类型。
我尝试并验证过的事情
我在这里注意到了奇怪的“在win32上”,但根据帖子1和帖子2,它似乎仅仅是“微软的无限智慧”的产物
题:
为什么在Windows和Mac和其他系统都运行64位的情况下,numpy.int64不能在Windows上转换为本地int数据类型?
对于Windows 64上默认的int
为什么是int32
我没有任何答案,但这是一个非常令人困惑的事实:
np.dtype('int')
在64位Windows上返回dtype('int32')
,在64位Linux上返回np.dtype('int')
dtype('int64')
。
另请参见此处的第二个警告和此numpy github问题 。
在您的具体情况下,我将使用pandas的is_numeric_dtype
函数以独立于平台的简单方式检查数字性:
from pandas.api.types import is_numeric_dtype
categorical_columns = ~train_X.dtypes.apply(is_numeric_dtype).to_numpy()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.