熊猫获取dummies()以获取数字分类数据

时间:2019-02-07 08:28:48

标签: pandas encoding categorical-data

我有2列:

  • 性别(字符串类型的分类值为'male'和'female')
  • 类(整数类型的分类值为1到10)

当我在以上两列上执行pd.get_dummies()时,只有“性别”被编码为两列。但是get_dummies函数不能转换“类”。

我也希望将“类”转换为10个虚拟列,类似于“一次热编码”。

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

2 个答案:

答案 0 :(得分:2)

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

df1 = pd.get_dummies(df.astype(str))

答案 1 :(得分:2)

如果您不想转换数据,则可以在 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)

dtypes是:

print(df.dtypes)
sex      category
class       int64
dtype: object

应用get_dummies:

df = pd.get_dummies(df, columns=['sex', 'class'])

验证:

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')

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

如果columns为None,则所有具有object或category dtype的列 将被转换

这就是为什么您只在性别栏看到假人而不在班上看到假人的原因。

希望这会有所帮助。学习愉快!

注意:已通过熊猫版本“ 0.25.2”测试