缩放/规范化 pandas 列

新手上路,请多包涵

我有一个像这样的数据框:

 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.

我已经尝试了其他事情,例如创建列表、转换列表并将其追加回数据框等。

最简单的方法是什么?

谢谢!

原文由 machump 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 781
2 个回答

选项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 的开销(除非必须,否则不要这样做,它是一个沉重的库)。

原文由 cs95 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果您只想缩放数据框中的一列,则必须按如下方式重塑列值:

 from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()
df['SIZE'] = scaler.fit_transform(df['TOTAL'].values.reshape(-1,1))

原文由 Yahia 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题