【问题标题】:SKLearn MinMaxScaler - scale specific columns only [duplicate]SKLearn MinMaxScaler - 仅缩放特定列
【发布时间】:2017-10-05 15:57:22
【问题描述】:

我想使用 MinMaxScaler 缩放 Pandas 数据帧中的部分(但不是全部)列。我该怎么做?

【问题讨论】:

    标签: pandas scikit-learn rescale


    【解决方案1】:

    演示:

    In [90]: df = pd.DataFrame(np.random.randn(5, 3), index=list('abcde'), columns=list('xyz'))
    
    In [91]: df
    Out[91]:
              x         y         z
    a -0.325882 -0.299432 -0.182373
    b -0.833546 -0.472082  1.158938
    c -0.328513 -0.664035  0.789414
    d -0.031630 -1.040802 -1.553518
    e  0.813328  0.076450  0.022122
    
    In [92]: from sklearn.preprocessing import MinMaxScaler
    
    In [93]: mms = MinMaxScaler()
    
    In [94]: df[['x','z']] = mms.fit_transform(df[['x','z']])
    
    In [95]: df
    Out[95]:
              x         y         z
    a  0.308259 -0.299432  0.505500
    b  0.000000 -0.472082  1.000000
    c  0.306662 -0.664035  0.863768
    d  0.486932 -1.040802  0.000000
    e  1.000000  0.076450  0.580891
    

    同样的结果也可以使用sklearn.preprocessing.minmax_scale

    from sklearn.preprocessing import minmax_scale
    
    df[['x','z']] = minmax_scale(df[['x','z']])
    

    【讨论】:

    • 指出minmax_scale 适用于开箱即用的单个数据框列可能对某些人有所帮助,其中MinMaxScaler 似乎需要多个列。如果您只想扩展xdf['x'] = minmax_scale(df['x'])。如果您的缩放值不是浮动的,那么 df['x'] = minmax_scale(df['x'].astype(np.float64)),以避免 dtype 转换警告。
    【解决方案2】:

    由于 sklearn >= 0.20,您可以使用 Column Transformer 完成此操作

    standard_transformer = Pipeline(steps=[
            ('standard', StandardScaler())])
    
    minmax_transformer = Pipeline(steps=[
            ('minmax', MinMaxScaler())])
    
    
    preprocessor = ColumnTransformer(
            remainder='passthrough', #passthough features not listed
            transformers=[
                ('std', standard_transformer , ['z']),
                ('mm', minmax_transformer , ['x','y'])
            ])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-30
      • 2019-10-04
      • 2019-05-18
      • 1970-01-01
      • 1970-01-01
      • 2018-03-20
      • 2022-12-16
      相关资源
      最近更新 更多