python - 在 Pandas 数据框列的子集上使用 Pipeline 中的 scikit StandardScaler

标签 python pandas scikit-learn

我想在 pandas 数据框列的子集上使用 sklearn.preprocessing.StandardScaler。在管道之外这是微不足道的:

df[['A', 'B']] = scaler.fit_transform(df[['A', 'B']])

但现在假设我在 df 中有字符串类型的“C”列和以下管道定义

from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline

pipeline =  Pipeline([
                ('standard', StandardScaler())
            ])

df_scaled = pipeline.fit_transform(df)

如何告诉 StandardScaler 只缩放列 A 和 B?

我习惯了 SparkML 管道,其中要缩放的特征可以传递给缩放器组件的构造函数:

normalizer = Normalizer(inputCol="features", outputCol="features_norm", p=1.0)

Note: The feature column is containing a sparse vector with all the numerical feature columns created by Spark's VectorAssembler

最佳答案

您可以查看 sklearn-pandas它提供了 Pandas DataFrame 和 sklearn 的集成,例如使用 DataFrameMapper:

mapper = DataFrameMapper([
...     (list_of_columnnames, StandardScaler())
... ])

如果你不需要外部依赖,你可以使用一个简单的自己的转换器,正如我回答的here :

class Columns(BaseEstimator, TransformerMixin):
    def __init__(self, names=None):
        self.names = names

    def fit(self, X, y=None, **fit_params):
        return self

    def transform(self, X):
        return X[self.names]

pipe =  make_pipeline(Columns(names=list_of_columnnames),StandardScaler())

关于python - 在 Pandas 数据框列的子集上使用 Pipeline 中的 scikit StandardScaler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50313521/

相关文章:

python - 如何使用 scikit-learn 预测网站点击次数的变化率

python - Tornado get_secure_cookie 返回的值与设置的值不同

python Fabric找不到主机必须手动设置 'env.host_string'

Python:如何将计数器对象添加到数据框?

python - Pandas :根据条件按行替换值

python - 条件数据框分组

python - 多标签分类中的 roc_curve 有斜率

Python 将字符串赋值给字典后转成元组

javascript - 从页面抓取时遇到问题

python - 具有多种特征的隔离森林将所有事物检测为异常