使用 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])
我有一个包含四列的 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])