Pandas SKLearn MinMaxScaler-仅缩放特定列

Pandas SKLearn MinMaxScaler-仅缩放特定列,pandas,scikit-learn,rescale,Pandas,Scikit Learn,Rescale,我想使用MinMaxScaler缩放Pandas数据帧中的一些(但不是全部)列。我怎么做?演示: 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

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

演示:

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']])

由于sklearn>=0.20,您可以使用

标准变压器=管道(步骤=[
('standard',StandardScaler())]
minmax_变压器=管道(步骤=[
('minmax',MinMaxScaler())]
预处理器=列转换器(
余数='passthrough',#未列出直通功能
变形金刚=[
('std',标准变压器,['z']),
('mm',最小最大值_变压器,['x','y'])
])

minmax\u scale适用于开箱即用的单个数据帧列,其中
MinMaxScaler
似乎需要多个列,这可能对一些人有所帮助。如果只想缩放
x
df['x']=minmax_scale(df['x'])
。如果要缩放的值不是浮点值,则
df['x']=minmax_scale(df['x'].astype(np.float64))
,以避免数据类型转换警告。