使用sklearn columntransfromer时解包错误
Unpack error while using sklearn columntransfromer
我正在尝试对数据帧进行一次热编码以进行一些测试。
我尝试使用 sklearn
中的常规 OneHotEncoder
,但 NaN
值似乎存在一些问题(NaN
值在我想要的列中不存在编码)
根据我的搜索,一个解决方案是使用列转换器,它可以仅将编码应用于某些列,如下所示
ct = ColumnTransformer([(OneHotEncoder(categories = categories_list),['col1','col2','col3'])])
其中 categories_list
是所有当前类别的列表。
问题是,当我尝试将这个转换器应用到我的数据帧时,我总是得到 not enough values to unpack
错误。
我就是这样变身的
ct.fit_transform(df_train_xgboost)
知道我该怎么做吗?
编辑:
一些示例数据
id | col1 | col2 | col3 | price | has_something
1 blue car new 23781 NaN
2 green truck used 24512 1
3 red van new 44521 0
更多代码
categories_list = ['blue','green','red','car','truck','van','new','used']
df_train_xgboost = df_train
df_train_xgboost = df_train_xgboost.drop(columns_I_dont_want, axis=1)
df_train_xgboost = df_train_xgboost.fillna(value = {'col1': 0, 'col2': 0, 'col3': 0})
ct = ColumnTransformer([(OneHotEncoder(categories = categories_list),['col1','col2','col3'])])
print(df_train_xgboost.shape)
ct.fit_transform(df_train_xgboost)
首先,ColumnTransformer
不需要。
为了使您的代码正常工作,您还需要一个输入参数,即转换器的“名称”。
完整示例:
df
col1 col2 col3
0 blue car new
1 green truck used
2 red van new
ct = ColumnTransformer([("onehot",OneHotEncoder(),[0,1,2])])
ct.fit_transform(df.values)
array([[1., 0., 0., 1., 0., 0., 1., 0.],
[0., 1., 0., 0., 1., 0., 0., 1.],
[0., 0., 1., 0., 0., 1., 1., 0.]])
- 现在请注意,仅使用
OneHotEncoder
: 即可获得相同的输出
o = OneHotEncoder()
o.fit_transform(df).toarray()
array([[1., 0., 0., 1., 0., 0., 1., 0.],
[0., 1., 0., 0., 1., 0., 0., 1.],
[0., 0., 1., 0., 0., 1., 1., 0.]])
我正在尝试对数据帧进行一次热编码以进行一些测试。
我尝试使用 sklearn
中的常规 OneHotEncoder
,但 NaN
值似乎存在一些问题(NaN
值在我想要的列中不存在编码)
根据我的搜索,一个解决方案是使用列转换器,它可以仅将编码应用于某些列,如下所示
ct = ColumnTransformer([(OneHotEncoder(categories = categories_list),['col1','col2','col3'])])
其中 categories_list
是所有当前类别的列表。
问题是,当我尝试将这个转换器应用到我的数据帧时,我总是得到 not enough values to unpack
错误。
我就是这样变身的
ct.fit_transform(df_train_xgboost)
知道我该怎么做吗?
编辑:
一些示例数据
id | col1 | col2 | col3 | price | has_something
1 blue car new 23781 NaN
2 green truck used 24512 1
3 red van new 44521 0
更多代码
categories_list = ['blue','green','red','car','truck','van','new','used']
df_train_xgboost = df_train
df_train_xgboost = df_train_xgboost.drop(columns_I_dont_want, axis=1)
df_train_xgboost = df_train_xgboost.fillna(value = {'col1': 0, 'col2': 0, 'col3': 0})
ct = ColumnTransformer([(OneHotEncoder(categories = categories_list),['col1','col2','col3'])])
print(df_train_xgboost.shape)
ct.fit_transform(df_train_xgboost)
首先,ColumnTransformer
不需要。
为了使您的代码正常工作,您还需要一个输入参数,即转换器的“名称”。
完整示例:
df
col1 col2 col3
0 blue car new
1 green truck used
2 red van new
ct = ColumnTransformer([("onehot",OneHotEncoder(),[0,1,2])])
ct.fit_transform(df.values)
array([[1., 0., 0., 1., 0., 0., 1., 0.],
[0., 1., 0., 0., 1., 0., 0., 1.],
[0., 0., 1., 0., 0., 1., 1., 0.]])
- 现在请注意,仅使用
OneHotEncoder
: 即可获得相同的输出
o = OneHotEncoder()
o.fit_transform(df).toarray()
array([[1., 0., 0., 1., 0., 0., 1., 0.],
[0., 1., 0., 0., 1., 0., 0., 1.],
[0., 0., 1., 0., 0., 1., 1., 0.]])