gpt4 book ai didi

python - 使用 sklearn columntransfromer 时解压错误

转载 作者:行者123 更新时间:2023-11-30 09:03:21 26 4
gpt4 key购买 nike

我试图对数据帧进行一次热编码以进行一些测试。

我尝试使用 sklearn 中的常规 OneHotEncoder 但它似乎对 NaN 值存在一些问题 (NaN > 我想要编码的列上不存在的值)

根据我的搜索,解决方案是使用列转换器,它可以仅将编码应用于某些列,如下所示

ct = ColumnTransformer([(OneHotEncoder(categories = categories_list),['col1','col2','col3'])])

其中categories_list是所有当前类别的列表。

问题是,当我尝试将此转换器应用于我的数据帧时,我总是收到没有足够的值来解包错误。

我就是这样变身的

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没有必要的。

  1. 为了使您的代码正常工作,您还需要一个输入参数,即变压器的“名称”。

    完整示例:

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.]])

    关于python - 使用 sklearn columntransfromer 时解压错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59051480/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com