Skip to main content
 首页 » 编程设计

python之缩放/归一化 pandas 列

2025年05月04日14leader

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

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