我有一个像这样的数据框:
TOTAL | Name
3232 Jane
382 Jack
8291 Jones
我想在名为 SIZE 的数据框中创建一个新缩放的列,其中 SIZE 是 5 到 50 之间的数字。
例如:
TOTAL | Name | SIZE
3232 Jane 24.413
382 Jack 10
8291 Jones 50
我试过了
from sklearn.preprocessing import MinMaxScaler
import pandas as pd
scaler=MinMaxScaler(feature_range=(10,50))
df["SIZE"]=scaler.fit_transform(df["TOTAL"])
但 如果您的数据具有单个特征,则使用 array.reshape(-1, 1) 或如果它包含单个样本,则使用 array.reshape(1, -1) reshape 您的数据。
我尝试了其他方法,例如创建列表、转换列表并将其追加回数据框等。
最简单的方法是什么?
谢谢!
请您参考如下方法:
选项 1
sklearn
你一次又一次地看到这个问题,错误真的应该表明你需要做什么。您基本上缺少输入的多余维度。将 df["TOTAL"] 更改为 df[["TOTAL"]]。
df['SIZE'] = scaler.fit_transform(df[["TOTAL"]])
df
TOTAL Name SIZE
0 3232 Jane 24.413959
1 382 Jack 10.000000
2 8291 Jones 50.000000
选项 2
Pandas
最好,我会绕过 sklearn,自己做最小-最大缩放。
a, b = 10, 50
x, y = df.TOTAL.min(), df.TOTAL.max()
df['SIZE'] = (df.TOTAL - x) / (y - x) * (b - a) + a
df
TOTAL Name SIZE
0 3232 Jane 24.413959
1 382 Jack 10.000000
2 8291 Jones 50.000000
这基本上就是最小-最大缩放器所做的,但是没有导入 scikit learn 的开销(除非必须,否则不要这样做,它是一个沉重的库)。
