因此,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表示)。所以,任何建议都会有所帮助......
另外,我应该提一下,我不一定需要一个热门编码,只需要创建虚拟变量。谢谢!
答案 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)