Python 用一个热编码处理sklearn中的分类变量

Python 用一个热编码处理sklearn中的分类变量,python,pandas,dataframe,machine-learning,scikit-learn,Python,Pandas,Dataframe,Machine Learning,Scikit Learn,是否有人可以帮助您使用任何现有的Python类,用于勾选以下复选框的sklearn 熊猫友好-返回数据帧的选项 应该能够在一个热编码中删除1列 处理测试数据中不可见的类别 与sklearn管道对象兼容 我想你在找我 请参见下面的示例 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']}

是否有人可以帮助您使用任何现有的Python类,用于勾选以下复选框的
sklearn

  • 熊猫友好-返回数据帧的选项
  • 应该能够在一个热编码中删除1列
  • 处理测试数据中不可见的类别
  • 与sklearn管道对象兼容

  • 我想你在找我

    请参见下面的示例

    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\u train=pd.get\u dummie(train)
    • 在新的(看不见的数据)中创建假人
      dummy\u new=pd.get\u dummie(新数据)
    • 将新数据重新索引到训练数据的列中,用0填充缺少的值
      dummy\u new.reindex(列=dummy\u train.columns,填充值=0)

    实际上,任何分类的新特性都不会进入分类器,但我认为这不会导致问题,因为它不知道如何处理它们

    我想你在找

    请参见下面的示例

    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\u train=pd.get\u dummie(train)
    • 在新的(看不见的数据)中创建假人
      dummy\u new=pd.get\u dummie(新数据)
    • 将新数据重新索引到训练数据的列中,用0填充缺少的值
      dummy\u new.reindex(列=dummy\u train.columns,填充值=0)

    实际上,任何分类的新特性都不会进入分类器,但我认为这不会导致问题,因为它不知道如何处理它们

    对不起。我知道这一点。在sklearn标准中寻找适合管道的东西。@AkshayNevrekar我相信OP的意思是
    sklearn.pipeline.pipeline
    对象。@solver149您应该在问题中添加这些信息。对不起。我知道这一点。在sklearn标准中寻找适合管道的东西。@AkshayNevrekar我相信OP是指
    sklearn.pipeline.pipeline
    对象。@solver149您应该在问题中添加这些信息。
    pandas
    sklearn
    中不存在这种东西。不过,只需少量编码,您就可以包装
    OneHotEncoder
    来完成您想要的操作。是的。我在这些行中找不到任何东西..这样的东西在
    pandas
    sklearn
    中本就不存在。不过,只需少量编码,您就可以包装
    OneHotEncoder
    来完成您想要的操作。是的。我在这些线上找不到什么东西。。