Pandas.get_dummies返回两列(_Y和_N)而不是一列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pandas.get_dummies返回两列(_Y和_N)而不是一列相关的知识,希望对你有一定的参考价值。

我正在尝试使用sklearn根据我的数据集训练决策树。

当我试图将数据切分为(结果:Y,并预测变量:X)时,结果(我的标签)在True / False中:

#data slicing 
X = df.values[:,3:27] #X are the sets of predicting variable, dropping unique_id and student name here
Y = df.values[:,'OffTask'] #Y is our predicted value (outcome), it is in the 3rd column 

这是我的方式,但我不知道这是否是正确的方法:

#convert the label "OffTask" to dummy 

df1 = pd.get_dummies(df,columns=["OffTask"])
df1

我的麻烦是数据集df1将我的标签Offtask返回到OffTask_NOffTask_Y

有人知道如何解决它吗?

答案

get_dummies用于将名义字符串值转换为整数。它返回的列数与列中的唯一字符串值一样多,例如:

df={'color':['red','green','blue'],'price':[1200,3000,2500]}
my_df=pd.DataFrame(df)
pd.get_dummies(my_df)

在您的情况下,您可以删除第一个值,只要值为null,就可以认为它将是第一个值

另一答案

你可以通过设置pd.get_dummies使drop_first=True只返回一列

y = pd.get_dummies(df,columns=["OffTask"], drop_first=True)

但这不是将标签转换为二进制文件的推荐方法。我建议使用labelbinarizer来达到这个目的。

例:

from sklearn import preprocessing
lb = preprocessing.LabelBinarizer()
lb.fit_transform(pd.DataFrame({'OffTask':['yes', 'no', 'no', 'yes']}))

#
array([[1],
       [0],
       [0],
       [1]])

以上是关于Pandas.get_dummies返回两列(_Y和_N)而不是一列的主要内容,如果未能解决你的问题,请参考以下文章

将“pandas.get_dummies”转换到新数据的简单方法?

pandas.get_dummies

特征提取pd.get_dummies() 详解(One-Hot Encoding)

如何让 pandas get_dummies 发出 N-1 个变量以避免共线性?

pandas get_dummies 如何记住哪个值变成了哪个新类别? [复制]

停止使用 Pandas get_dummies() 进行特征编码