【发布时间】:2019-09-05 10:14:43
【问题描述】:
背景:
我在执行机器学习案例中的代码时遇到了问题。我已经用一个丑陋的解决方法解决了这个问题,所以我能够执行笔记本,但我仍然不完全理解问题的原因。
当我尝试使用 sklearn 中的 OneHotEncoder 执行以下用于创建虚拟变量的代码时,就会出现问题。
categorical_columns = ~np.in1d(train_X.dtypes, [int, float])
虽然代码执行没有任何错误,但它无法将 numpy.int64 识别为 int 数据类型,因此将所有 int64 数据类型列分类为分类并将它们解析到 OneHotEncoder。
train_X 是具有以下列和数据类型的 pandas 数据框对象,您可以看到整数存储为 numpy.int64。
代码最初是在 Mac 上的 Jupyter Notebook 中编写的,它运行良好,并且在 Google 云上的 Colaboraty 中也运行良好。所有其他尝试在几乎相同的 Windows 机器上运行 Jupyter 代码的人都遇到了与我在运行脚本时相同的问题。
问题:
在 windows 机器上,numpy.int64 似乎没有链接到本机 int 数据类型。
我已经尝试和验证的事情
- 虽然这个post 已经过时并且基于python 2.7.x,但让我相信这是一个版本问题,所以我验证了:
- 我的机器在 64 位版本的 windows 10 上运行
- Python 安装为 64 位
- Anaconda 也安装为 64 位
- 使用干净的环境,仅包含 pandas、numpy、sklearn 和依赖项,均已更新到最新版本
- 当我运行 python 时,我得到以下信息:
我注意到这里奇怪的“on win32”,但根据post 1和post 2,它似乎只是“微软无限智慧”的产物
问题:
为什么 numpy.int64 不能在 Windows 上转换为本机 int 数据类型,而一切都运行 64 位,而在 Mac 和其他系统上却是这样?
【问题讨论】:
标签: python python-3.x pandas numpy