Я пытаюсь создать конвейер, основанный на scikit-learn, для конвейера через фрейм данных pandas. На каждом этапе следует затрагивать только подмножество функций, остальные должны пройти без изменений. Я использую IBEX для этого, поскольку DataFrameMapper, кажется, не выполняет эту работу за меня, поскольку нетронутые поля не сохраняются, для полноты, здесь код DataFrameMapper (который НЕ работает для меня, но, возможно, для кого-то еще) :
from sklearn_pandas import DataFrameMapper
from sklearn.preprocessing import StandardScaler
mapper = DataFrameMapper([
(['x','y','z'], StandardScaler())
])
df_scaled = mapper.fit_transform(df)
Фрейм данных имеет следующие поля
x y z исходный класс
Используя IBEX, я запускаю следующий код:
from ibex.sklearn.preprocessing import StandardScaler
from ibex.sklearn.preprocessing import LabelEncoder
from ibex import trans
pipeline = (trans(LabelEncoder(), in_cols=['class']) + trans(None, ['source', 'x','y','z'])) | (trans(StandardScaler(), in_cols=['x','y','z']) + trans(None, ['source', 'class']))
df_scaled = pipeline.fit_transform(df)
Теперь я получаю следующую ошибку, поскольку кажется, что поля не сохраняются на втором этапе конвейера:
KeyError: "['x' 'y' 'z'] отсутствует в индексе"
См. GIST полной ошибки