Pandas 为数字分类数据获取 dummies()
Pandas get dummies() for numeric categorical data
我有 2 列:
- 性别(字符串类型的分类值为 'male' 和 'female')
- Class(整数类型的分类值为 1 到 10)
当我在上面的 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'
进行测试
我有 2 列:
- 性别(字符串类型的分类值为 'male' 和 'female')
- Class(整数类型的分类值为 1 到 10)
当我在上面的 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'
进行测试