我想在一些pandas DataFrame上“同时”应用MinmaxScaler。这意味着我希望缩放器对这些列中的所有数据执行,而不是分别对每列执行。
我的DataFrame有20列。我想同时在其中的12个列上应用缩放器。我已经阅读了this。但它不能解决我的问题,因为它会单独作用于每列。
我的DataFrame有20列。我想同时在其中的12个列上应用缩放器。我已经阅读了this。但它不能解决我的问题,因为它会单独作用于每列。
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
您可以从这些列中提取“min”和“max”统计数据,并自行执行缩放:
# 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)
而不是分别提取最小/最大值,这样会泄露测试集的信息。