Python Pandas.get_假人返回到两列(_Y和_N),而不是一列

Python Pandas.get_假人返回到两列(_Y和_N),而不是一列,python,python-3.x,pandas,scikit-learn,Python,Python 3.x,Pandas,Scikit Learn,我正在尝试使用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 (o

我正在尝试使用
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\N
Offtask\Y


有人知道如何修复它吗?

您可以通过设置
drop\u 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]])

get_dummies用于将标称字符串值转换为整数。它返回的列数与列中可用的唯一字符串值数相同,例如:

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

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

这是关于熊猫的吗?可能是重复的,我认为这不是同一个问题。我不知道如何转换列表和重用列表。sklearn可以将True/False作为y向量,并且可以很好地进行拟合,您真的不需要转换。但是如果你真的坚持要看到0和1,你可以使用
df['OffTask']=df['OffTask']。astype(int)
Hi,谢谢你的回复。我仍然有点困惑,在这种情况下,预处理是如何将列表转换为二进制的?它如何返回到我的数据集?它将为
列表中的每个唯一值创建一个虚拟变量。如果对应的元素属于该值,则虚拟变量将为1。通过链接进行详细解释。嗨,谢谢。这就是我所做的。在这种情况下,我只是放弃了,但我只是想知道是否有更好的方法来做到这一点