使用 sklearn 标准化 pandas 数据框中的一组列

Standardizing a set of columns in a pandas dataframe with sklearn

我有一个包含四列的 table:CustomerID、Recency、Frequency 和 Revenue。

我需要标准化(缩放)列 Recency、Frequency 和 Revenue 并保存 CustomerID 列。

我使用了这个代码:

from sklearn.preprocessing import normalize, StandardScaler
df.set_index('CustomerID', inplace = True)
standard_scaler = StandardScaler()
df = standard_scaler.fit_transform(df)
df = pd.DataFrame(data = df, columns = ['Recency', 'Frequency','Revenue'])

但结果是 table 没有 CustomerID 列。有没有什么办法可以得到 table 与相应的 CustomerID 和缩放列?

fit_transform returns an ndarray 没有索引,因此您将丢失在 df.set_index('CustomerID', inplace = True) 上设置的索引。

您可以简单地获取需要转换的列的子集,将它们传递给 StandardScaler,然后覆盖原始列,而不是这样做。

# Subset of columns to transform
cols = ['Recency','Frequency','Revenue']

# Overwrite old columns with transformed columns
df[cols] = StandardScaler.fit_transform(df[cols])

这样,您 CustomerID 完全不变。

您可以使用 scale 来标准化特定列:

from sklearn.preprocessing import scale
cols = ['Recency', 'Frequency', 'Revenue']
df[cols] = scale(df[cols])