熊猫数据帧中多个列的最小MaxScaler



我想将 MinmaxScaler 应用于许多熊猫数据帧"一起"。这意味着我希望缩放器对这些列中的所有数据执行,而不是分别对每列执行。

我的数据帧有 20 列。我想同时在其中 12 列上应用缩放器。我已经读过了。但它并不能解决我的问题,因为它分别作用于每一列。

IIUC,您希望sklearn缩放器具有相同条件(在本例中为最小和最大定义)拟合和转换多个列。这是您可以做到这一点的一种方法 -

  1. 您可以保存列的初始形状,然后将这些列的 numpy 数组转换为 2D 数组中的一维数组。
  2. 接下来,您可以调整缩放器并转换此 1D 数组
  3. 最后,您可以使用旧形状将数组重新塑造回所需的 n 列并保存它们

这种方法的优点是它适用于您需要使用的任何 sklearn 缩放器,MinMaxScalerStandardScaler等。

import pandas as pd
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
dfTest = pd.DataFrame({'A':[14.00,90.20,90.95,96.27,91.21],
'B':[103.02,107.26,110.35,114.23,114.68],
'C':['big','small','big','small','small']})
cols = ['A','B']
old_shape = dfTest[cols].shape #(5,2)
dfTest[cols] = scaler.fit_transform(dfTest[cols].to_numpy().reshape(-1,1)).reshape(old_shape)
print(dfTest)
A         B      C
0  0.000000  0.884188    big
1  0.756853  0.926301  small
2  0.764303  0.956992    big
3  0.817143  0.995530  small
4  0.766885  1.000000  small

您可以从这些列中提取"最小"和"最大"统计信息并自行执行缩放:

# columns of interest
cols = [...]
# get the minimum and maximum values in that region
vals = df[cols].to_numpy()
min_val = vals.min()
max_val = vals.max()
# scale the region using them
df[cols] = df[cols].sub(min_val).div(max_val - min_val)

(sub是执行"-"的方法方法,div用于"/"。

上面,df你的训练数据帧;要缩放测试数据帧,你可以用最后一行中的df替换,例如

test_df[cols] = test_df[cols].sub(min_val).div(max_val - min_val)

而不是单独提取它的最小值/最大值,这会从测试集中泄漏信息。

最新更新