如何将 StandardScaler 应用于单个列?

How to apply StandardScaler to a single column?

我需要将 sklearnStandardScaler 应用于 DataFrame 的单个列 col1

df:

col1  col2  col3
1     0     A
1     10    C
2     1     A
3     20    B

我是这样做的:

from sklearn.preprocessing import StandardScaler

def listOfLists(lst):
    return [[el] for el in lst]

def flatten(t):
    return [item for sublist in t for item in sublist]

scaler = StandardScaler()

df['col1'] = flatten(scaler.fit_transform(listOfLists(df['col1'].to_numpy().tolist())))

但是,然后我应用inverse_transform,然后它不给我初始值col1。相反,它 returns 标准化值:

scaler.inverse_transform(flatten(scaler.fit_transform(listOfLists(df['col1'].to_numpy().tolist()))))

或:

scaler.inverse_transform(df['col1'])

您可以直接在列上安装一个缩放器(因为缩放器需要一个二维数组,您可以通过 df[['col1']] select 将列作为 DataFrame):

scaler = StandardScaler()
>>> arr = scaler.fit_transform(df[['col1']]).flatten()
array([-0.90453403, -0.90453403,  0.30151134,  1.50755672])

>>> scaler.inverse_transform(arr)
array([1., 1., 2., 3.])