Pandas 获取数字分类数据的 dummy()

Sup*_*dar 6 encoding pandas categorical-data

我有两列:

  • 性别(字符串类型的分类值为“男性”和“女性”)
  • 类(整数类型的分类值为 1 到 10)

当我pd.get_dummies()在上面的 2 列上执行时,只有 'Sex' 被编码到 2 列中。但是 'Class' 不会被 get_dummies 函数转换。

我还希望将“类”转换为 10 个虚拟列,类似于 One Hot Encoding。

这是预期的行为吗?有解决方法吗?

jez*_*ael 9

您可以将值转换为字符串:

df1 = pd.get_dummies(df.astype(str))
Run Code Online (Sandbox Code Playgroud)


Sid*_*Sid 8

如果您不想转换数据,可以在get_dummies中使用 'columns' 参数。这是快速演练:

这是根据您的描述复制的数据框:

sex_labels = ['male', 'female']
sex_col = [sex_labels[i%2] for i in range(10)]
class_col = [i for i in range(10)]
df = pd.DataFrame({'sex':sex_cols, 'class':class_col})
df.sex = pd.Categorical(df.sex)
Run Code Online (Sandbox Code Playgroud)

数据类型是:

print(df.dtypes)
sex      category
class       int64
dtype: object
Run Code Online (Sandbox Code Playgroud)

应用 get_dummies:

df = pd.get_dummies(df, columns=['sex', 'class'])
Run Code Online (Sandbox Code Playgroud)

核实:

print(df.columns)

输出:

Index(['sex_female', 'sex_male', 'class_0',
'class_1','class_2','class_3','class_4','class_5',
'class_6','class_7','class_8','class_9'],dtype='object')
Run Code Online (Sandbox Code Playgroud)

根据文档,https://pandas.pydata.org/pandasdocs/stable/reference/api/pandas.get_dummies.html

如果 columns 为 None,则所有具有对象或类别 dtype 的列都将被转换

这就是为什么你只能在性专栏而不是课堂上看到假人。

希望这可以帮助。快乐学习!

注意:使用 pandas 版本“0.25.2”进行测试