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

时间:2017-11-30 17:05:24

标签: python-3.x scikit-learn preprocessor one-hot-encoding int64

因此,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只需要包含非负整数。”

如您所见,X DOES仅包含非负整数!当我修剪一些数字并将数据类型更改为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表示)。所以,任何建议都会有所帮助......

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

1 个答案:

答案 0 :(得分:1)

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)