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

Posted

技术标签:

【中文标题】Pandas.get_dummies 返回两列(_Y 和 _N)而不是一列【英文标题】:Pandas.get_dummies return to two columns(_Y and _N) instead of one 【发布时间】:2019-07-05 11:33:59 【问题描述】:

我正在尝试使用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

有人知道怎么解决吗?

【问题讨论】:

这是关于熊猫的吗? How can I map True/False to 1/0 in a Pandas DataFrame?的可能重复 我不认为这是同一个问题。我不确定如何转换列表并重用列表。 sklearn 可以将 True/False 作为 y 向量并进行拟合,真的不需要你转换。但是如果你真的坚持看到0和1你可以使用df['OffTask'] = df['OffTask'].astype(int) 【参考方案1】:

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

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

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

【讨论】:

嗨,谢谢。这就是我所做的。在这种情况下,我只是删除了 _N,但我只是想知道是否有更好的方法来做到这一点【参考方案2】:

您可以通过设置 drop_first=True

使 pd.get_dummies 只返回一列
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]])

【讨论】:

您好,感谢您的回复。在这种情况下,我仍然有点困惑预处理如何将列表转换为二进制?它怎么会返回到我的数据集? 它将为list / pd.Series 中的每个唯一值创建一个虚拟变量。如果对应的元素属于该值,则虚拟变量将为 1。 通过链接查看详细说明。 scikit-learn.org/stable/modules/…

以上是关于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() 进行特征编码