pythonは独熱符号化を実現する


たとえば、次のデータセットがあります.
import pandas as pd
testdata = pd.DataFrame({'pet': ['cat', 'dog', 'dog', 'fish'], 'age': [4, 6, 3, 3],
                         'salary': [4, 5, 1, 1]})
 pet  age  salary
0   cat    4       4
1   dog    6       5
2   dog    3       1
3  fish    3       1

方法1:get_を利用するdummies関数


ある列を独熱符号化する


testdataの「age」列と「salary」列を独熱符号化し、testdataにマージする
age = pd.get_dummies(testdata['age'], prefix='age')   
salary = pd.get_dummies(testdata['salary'], prefix='salary')
testdata.drop(["age", "salary"], axis=1, inplace=True)   #  "age", "salary" 
testdata = pd.concat((testdata, age, salary),  axis=1)   #  
print(age)
print(testdata)

出力:
 age , dataframe , :
   age_3  age_4  age_6
0      0      1      0
1      0      0      1
2      1      0      0
3      1      0      0
 testdata :
   pet  age_3  age_4  age_6  salary_1  salary_4  salary_5
0   cat      0      1      0         0         1         0
1   dog      0      0      1         0         0         1
2   dog      1      0      0         1         0         0
3  fish      1      0      0         1         0         0

このtestdataは、トレーニングセットとしてモデルに直接配置できます.

ある数列のロットに対して独熱符号化を行う


次のように直接書いて、2つの列を一度に独熱符号化することもできます.
df = pd.get_dummies(testdata, columns=['age',"salary"])  # columns 
print(df)   #  

方法2:OneHotEncoder関数で

from sklearn.preprocessing import OneHotEncoder

age = OneHotEncoder(sparse = False).fit_transform( testdata[['age']] )
sa = OneHotEncoder(sparse = False).fit_transform( testdata[['salary']])
final_output = np.hstack((age, sa))
print(final_output )

出力:
[[0. 1. 0. 0. 1. 0.]
 [0. 0. 1. 0. 0. 1.]
 [1. 0. 0. 1. 0. 0.]
 [1. 0. 0. 1. 0. 0.]]

pet列を追加したい場合は、次の方法を試してみてください.
f = []
f.extend(age)
f.extend(sa)
f.append(testdata["pet"])

参考:Pythonマシン学習におけるDictVectorizerの使用説明pandasでのget_の利用dummies()によるユニヒートコーディング(One-Hot encoding)