Pandas 为数字分类数据获取 dummies()

Pandas get dummies() for numeric categorical data

我有 2 列:

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

我希望 'Class' 也被转换成 10 个虚拟列,类似于 One Hot Encoding。

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

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

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

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

数据类型是:

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

处的文档

If columns is None then all the columns with object or category dtype will be converted

这就是为什么您只看到性别列的假人而不是 class 的原因。

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

注意:使用 pandas 版本 '0.25.2'

进行测试