繁体   English   中英

在Windows x64上将numpy.int64数据类型解释为Python中的本机int数据类型

[英]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数据类型。

我尝试并验证过的事情

  1. 尽管已过时且基于python 2.7.x,但该帖子使我相信这是版本问题,因此我进行了验证:
    • 我的机器在Windows 10的64位版本上运行
    • Python安装为64位
    • Anaconda也安装为64位
    • 使用只有熊猫,numpy,sklearn和依赖项的干净环境,所有这些都已更新到最新版本
    • 当我运行python时,我得到以下信息:

终奌站

我在这里注意到了奇怪的“在win32上”,但根据帖子1帖子2,它似乎仅仅是“微软的无限智慧”的产物

  1. 我试图通过阅读理解的问题123 我已经设法基于这些计算出了几种解决方法,但是我仍然不明白为什么代码可以在一个系统上工作而不能在另一个系统上工作。

题:

为什么在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM