缩放/标准化pandas列

时间:2018-04-25 17:17:29

标签: python pandas scikit-learn

我有一个类似的数据框:

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.

我尝试过其他的事情,比如创建一个列表,转换它,然后将它追加到数据帧等等。

最简单的方法是什么?

谢谢!

2 个答案:

答案 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