使用一键编码处理sklearn中的分类变量

时间:2019-03-22 03:58:51

标签: python pandas dataframe machine-learning scikit-learn

有人可以帮助任何现有的sklearn分类编码器的Python类,将以下复选框打勾吗?

  1. 熊猫友好-返回数据框的选项
  2. 应该能够以一键编码方式删除1列
  3. 处理测试数据中的无用类别。
  4. 与sklearn Pipeline对象兼容。

1 个答案:

答案 0 :(得分:0)

我认为您正在寻找pandas.get_dummies

请参见以下示例。

df = pd.DataFrame({"col_a":['cat','dog','cat','mouse','mouse','cat'], 'col_b':[10,14,16,18,20,22], 'col_c':['a','a','a','b','b','a']})

# `drop_first` parameter will drop the one categorical column
df = pd.get_dummies(df, columns=['col_a','col_c'], drop_first=True)
print(df)

输出:

  col_b  col_a_dog  col_a_mouse  col_c_b                                                                                               
0     10          0            0        0                                                                                               
1     14          1            0        0                                                                                               
2     16          0            0        0                                                                                               
3     18          0            1        1                                                                                               
4     20          0            1        1                                                                                               
5     22          0            0        0      

它涵盖了您提到的前两个条件。

对于第三种情况,您可以执行以下操作。

  • 根据训练数据创建假人
    dummy_train = pd.get_dummies(train)
  • 在新的(看不见的数据)中创建假人
    dummy_new = pd.get_dummies(new_data)
  • 将新数据重新索引到训练数据的列中,用0填充缺失的值
    dummy_new.reindex(columns = dummy_train.columns, fill_value=0)

实际上,分类的任何新功能都不会进入分类器,但是我认为这不会引起问题,因为它不知道如何处理它们。