Эмпирическое правило: никогда , используйте pandas.get_dummies
на нескольких фреймах данных. Это не гарантирует вам тот же размер.
import pandas as pd
print(pd.get_dummies(['a', 'b', 'c']))
a b c
0 1 0 0
1 0 1 0
2 0 0 1
print(pd.get_dummies(['b', 'c']))
b c
0 1 0
1 0 1
Это безопасно, только если вы сначала pandas.get_dummies
, а затем разделите на x_train
и x_test
. Но вместо этого вы можете использовать sklearn.preprocessing.OneHotEncoder
:
import numpy as np
from sklearn.preprocessing import OneHotEncoder
ohe = OneHotEncoder(sparse=False)
ohe.fit_transform(np.reshape(['a', 'b', 'c'], (-1, 1)))
array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
ohe.transform(np.reshape(['b', 'c'], (-1, 1))) # Its transform, NOT fit_transform
array([[0., 1., 0.],
[0., 0., 1.]])
Обратите внимание, что теперь он правильно утверждает, что два разных ввода приводят к одинаковому количеству столбцов.