熊猫get_dummies如何转换值

时间:2019-12-28 17:39:12

标签: python pandas dataframe

我有这个专栏

df["Pclass"].tail()

Pclass

2
1
3
1
3

我创建了柱子的假人

dummies = pd.get_dummies(df["Pclass"],prefix="Pclass")
df = pd.concat([df,dummies],axis=1)

结果

df["Pclass_1"].tail()


    Pclass_1    Pclass_2    Pclass_3
886   0             1         0
887   1             0         0
888   0             0         1
889   1             0         0
890   0             0         1



我不会放弃,因为它会按照规则将列中的数字转换为1和0

3 个答案:

答案 0 :(得分:4)

pd.get_dummies

基本上,它将类别的每个唯一值都转到其自己的列,并具有一个布尔标志(10)来标记该行上存在哪个分类值。

让我们看一个不那么抽象的示例:

df = pd.DataFrame({'sex':['male', 'female', 'unknown', 'female']})

       sex
0     male
1   female
2  unknown
3   female

df.join(pd.get_dummies(df['sex'], prefix='sex'))

       sex  sex_female  sex_male  sex_unknown
0     male           0         1            0
1   female           1         0            0
2  unknown           0         0            1
3   female           1         0            0

如您所见,原始列的第一行是male,在虚拟变量列sex_male中,我们看到有一个标记1

       sex  sex_female  sex_male  sex_unknown
0     male           0         1            0

然后在第二行的原始列中,值为female,我们在虚拟变量列sex_female中看到标志1

       sex  sex_female  sex_male  sex_unknown
1   female           1         0            0

以此类推。

要记住的重要一点是,当您应用pd.get_dummies时:

  

amount of new dummie columns = amount of unique values in original caterogical column


用机器学习的术语来说,我们称之为单次编码

使用scikit-learn时,外观如下:

from sklearn.preprocessing import OneHotEncoder

encoder = OneHotEncoder()
encoder.fit_transform(df['sex'].to_numpy().reshape(-1,1)).toarray()

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

答案 1 :(得分:2)

依赖于数字输入的预测模型不能直接 处理开放的文本字段或分类属性。 相反,这些信息丰富的数据需要在处理之前 将信息呈现给模型。 基于树的模型和朴素贝叶斯模型是例外。大多数型号 要求预测变量采用数字形式。

为无序类别创建虚拟变量是一种将分类属性转换为数字的方法。 @Erfan回答了虚拟变量的作用。但是以编码有序属性为例:具有C类的无序预测变量可以由C-1表示 二进制伪变量或二进制伪变量的哈希版本。 这些方法有效地将分类信息呈现给 模型。

但是现在假设C类具有相对顺序。对于 例如,考虑具有“低”,“中”类别的预测变量, 和“高”。 像对无序数据一样创建虚拟属性会丢失 相对顺序中包含的信息。

对于有序数据编码:

  • 多项式对比度:对比度是变量的线性组合 (参数或统计信息),其系数的总和为零,从而允许 比较不同的治疗方法。
  • 将预测变量视为无序因素。如果真正的基础模式 是线性的还是二次的,无序虚拟变量可能无效 发现这一趋势。
  • 将排序的类别转换为一组数字分数 基于特定于上下文的信息。

答案 2 :(得分:1)

它为出现在原始列中的每个值创建一个虚拟列,然后如果该行具有与该虚拟列对应的值,则为每一行放置一个1,否则为0。

第886行的Pclass列为2,因此在Pclass_2列中转换为1,在所有其他虚拟列中转换为0。

行887的Pclass列为1,因此在Pclass_1列中转换为1,在所有其他虚拟列中转换为0。