需要解决 SKLearn 预处理中的 OneHotEncoder 问题

Need a Work-around for OneHotEncoder Issue in SKLearn Preprocessing

因此,OneHotEncoder 似乎无法使用 np.int64 数据类型(仅适用于 np.int32)!这是代码示例:

import numpy as np
import pandas as pd
from sklearn.preprocessing import OneHotEncoder

a = np.array([[56748683,8511896545,51001984320],[18643548615,28614357465,56748683],[8511896545,51001984320,40084357915]])
b = pd.DataFrame(a, dtype=np.int64)

ohe = OneHotEncoder()
c = ohe.fit_transform(b).toarray()

当我 运行 时,出现以下错误:"ValueError: X needs to contain only non-negative integers."

如您所见,X 确实只包含非负整数!当我 trim 一些数字并将数据类型更改为 int32 时,它工作正常:

a = np.array([[56748,8511896,51001984],[18643548,28614357,56748],[8511896,51001984,40084357]])
b = pd.DataFrame(a, dtype=np.int32)
ohe = OneHotEncoder()
c = ohe.fit_transform(b).toarray()

不幸的是,我需要编码的数据有11位数字(不能用int32表示)。所以,任何建议都会有所帮助...

另外,我应该提一下,我不一定需要单热编码,只需要创建虚拟变量。谢谢!

Pandas 有一个创建虚拟变量的 get_dummies 函数:

import numpy as np
import pandas as pd

a = np.array([[56748683,8511896545,51001984320],[18643548615,28614357465,56748683],[8511896545,51001984320,40084357915]])
b = pd.DataFrame(a, dtype=np.int64)
b = b.astype('object')
c = pd.get_dummies(b)