Splitting survey data with OneHotEncoder
我有一个调查结果的数据框,其中有选项A-E,并且可以选择多个选项-选项可以是" A"或" A; C; D"等。
我将使用这些数据进行一些机器学习,并希望通过
我的初始调查数据的一个示例是:
1 | survey_data = pd.DataFrame({'Q1': ['A','B','C','A;D', 'D;E', 'F']}) |
我最初尝试使用
您还可以为此使用MultilabelBinarizer:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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]]) |
这是使用get_dummies的一种方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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 |