Удаление столбца в sklearn Pipeline после его использования для создания новых функций.Python

Программы на Python
Ответить
Anonymous
 Удаление столбца в sklearn Pipeline после его использования для создания новых функций.

Сообщение Anonymous »


У меня есть пример данных, где один столбец содержит строковые значения (например, «34 12»). На этапе предварительной обработки я создал два новых столбца, сохранив правые и левые целые числа строкового столбца. В конце я хочу избавиться от строкового столбца. Я не знаю, как это сделать в конвейере.

Здесь уменьшенная версия кода, позволяющая воссоздать мою проблему. Я попробовал использовать ("column_dropper", "drop", ["string1"]) в ColumnTransformer. Но когда я проверяю x_transformed, это пустой массив, который все еще содержит строковые значения:

array([[1.0, 6.5, '34 12', 34, 12], [2.0, 6.0, '34 5', 34, 5], [1.5, 7.0, '56 6', 56, 6]], dtype=объект) Вот код:

импортировать панд как pd из sklearn.preprocessing импорт FunctionTransformer из sklearn.impute импорт SimpleImputer из sklearn.pipeline конвейер импорта из sklearn.compose импорт ColumnTransformer из sklearn.preprocessing импортировать LabelEncoder из sklearn.base импортировать BaseEstimator, TransformerMixin #создание примера данных data= {"string1": ["34 12", "34 5", "56 6"], "возраст": [1, 2, Нет], "оценка": [Нет, 6, 7]} x_train = pd.DataFrame(данные=данные) #определить функции защита Extract_int2 (х): num = x.split(" ")[-1] если num.isnumeric(): вернуть число (число) еще: вернуть 0 защита Extract_int1 (х): число = x.split(" ")[0] если num.isnumeric(): вернуть число (число) еще: вернуть 0 защита int_features (дф): df["num1"] = df["string1"].apply(extract_int1) df["num2"] = df["string1"].apply(extract_int2) возврат DF columns_to_drop="string1" #define конвейер num_vals = Pipeline([("imputer", SimpleImputer(strategy = "mean"))]) Features_vals = Pipeline([("new_features", FunctionTransformer(int_features, validate=False))]) preprocess_pipeline = ColumnTransformer(transformers=[ ("num_preprocess", num_vals, ["возраст", "оценка"]), ("feature_preprocess", Features_vals, ["string1"]), ("column_dropper", "drop", ["string1"])]) preprocess_pipeline.fit(x_train) x_transformed = preprocess_pipeline.transform(x_train) x_transformed Я пытался использовать пользовательскую функцию удаления с помощью FunctionTransformer(), но это тоже не сработало.
def drop_column(df): df = df.drop(columns=["string1"]) возврат DF #define конвейер num_vals = Pipeline([("imputer", SimpleImputer(strategy = "mean"))]) Features_vals = Pipeline([("new_features", FunctionTransformer(int_features, validate=False))]) dropping= Pipeline([("drop_string", FunctionTransformer(drop_column))]) preprocess_pipeline = ColumnTransformer(transformers=[ ("num_preprocess", num_vals, ["возраст", "оценка"]), ("feature_preprocess", Features_vals, ["string1"]), ("drop_preprocess", удаление, ["string1"]))] ) preprocess_pipeline.fit(x_train) x_transformed = preprocess_pipeline.transform(x_train) x_transformed
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»