我有一个数据框,其中包含调查结果,其中有选项A-E,可以选择多个选项 - 选项可以是'A'或'A; C; D'等。
我将使用这些数据进行一些机器学习,我希望通过OneHotEncoder
运行它,最终得到5列,1和0。
我的初步调查数据的一个例子是:
survey_data = pd.DataFrame({'Q1': ['A','B','C','A;D', 'D;E', 'F']})
我最初尝试LabelEncoder
,但显然最终有很多功能(而不仅仅是A-E)。
答案 0 :(得分:2)
您也可以使用MultilabelBinarizer:
inputX = [element.split(';') for element in survey_data['Q1']]
from sklearn.preprocessing import MultiLabelBinarizer
mlb = MultiLabelBinarizer()
transformedX = mlb.fit_transform(inputX)
#Out: transformedX
#array([[1, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0],
[0, 0, 1, 0, 0, 0],
[1, 0, 0, 1, 0, 0],
[0, 0, 0, 1, 1, 0],
[0, 0, 0, 0, 0, 1]])
答案 1 :(得分:1)
这是一种方法,使用get_dummies:
import pandas as pd
# example data provided by OP
survey_data = pd.DataFrame({'Q1': ['A','B','C','A;D', 'D;E', 'F']})
# split out rows with multiple chosen options into columns
tmp = survey_data.Q1.str.split(';').apply(pd.Series)
# one-hot encode columns with get_dummies, then overlay into one df
df = (pd.get_dummies(tmp[0])
.add(pd.get_dummies(tmp[1]), fill_value=0)
.astype(int))
print(df)
A B C D E F
0 1 0 0 0 0 0
1 0 1 0 0 0 0
2 0 0 1 0 0 0
3 1 0 0 1 0 0
4 0 0 0 1 1 0
5 0 0 0 0 0 1