преобразование категориальных значений в числовой / плавающий индекс?

#python #pandas #scikit-learn

#python #панды #scikit-learn

Вопрос:

есть ли способ в pandas или sklearn преобразовать категориальные значения в уникальный числовой / плавающий индекс и включить их в конвейер? нужно придерживаться sklearn 18.1, потому что это то, что доступно на сервере

 ex:
c1 | c2
--------
cat1 | 1.0
cat2 | 2.0
cat2 | 2.0
cat3 | 3.0
 

сталкивались с проблемами, когда LabelEncoder и OneHotEncoder НЕ могли работать вместе в конвейере и иметь строковые данные ввода OHE…

для применения прогнозов некоторые категориальные значения присутствуют не всегда, и модель терпит неудачу, потому что я не могу использовать handle_unknown=»ignore» в конвейере

следовательно, мне пришлось использовать pandas.get_dummies() для OHE, который я не хочу использовать из-за отсутствия категорий

 # tried

class DataFrameSelector(BaseEstimator, TransformerMixin):
    def __init__(self, attribute_names):
        self.attribute_names = attribute_names
    def fit(self, X, y=None):
        return self
    def transform(self, X):
        return X[self.attribute_names].values

cat_pipeline = Pipeline([
                    ("select", DataFrameSelector(cat_features)),
                  ("index", LabelEncoder()),
                  ("ohe", OneHotEncoder(handle_unknown="ignore"))
                ])

test = cat_pipeline.fit_transform(X_train)
test.shape
 
 # currently using but fails when applying predictions to new data w/o all the categories that were OHE via pandas.get_dummies()

class DataFrameSelector(BaseEstimator, TransformerMixin):
    def __init__(self, attribute_names):
        self.attribute_names = attribute_names
    def fit(self, X, y=None):
        return self
    def transform(self, X):
        return X[self.attribute_names].values


                ("cat", Pipeline([
                    ("select", DataFrameSelector(cat_ohe))
                ])),