我有一个类似的数据框:
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"])
但获得了Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.
我尝试过其他的事情,比如创建一个列表,转换它,然后将它追加到数据帧等等。
最简单的方法是什么?
谢谢!
答案 0 :(得分:3)
选项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
这实际上是min-max缩放器所做的,但没有导入scikit学习的开销(除非你必须这样做,否则它不是一个沉重的库)。
答案 1 :(得分:0)
如果您只想缩放数据框中的一列,则必须按如下所示重新调整列值:
sum