mac*_*ump 1 python pandas scikit-learn
我有一个像这样的数据框:
TOTAL | Name
3232 Jane
382 Jack
8291 Jones
Run Code Online (Sandbox Code Playgroud)
我想在数据框中创建一个新缩放的列,SIZE其中where SIZE是5到50之间的数字。
例如:
TOTAL | Name | SIZE
3232 Jane 24.413
382 Jack 10
8291 Jones 50
Run Code Online (Sandbox Code Playgroud)
我试过了
from sklearn.preprocessing import MinMaxScaler
import pandas as pd
scaler=MinMaxScaler(feature_range=(10,50))
df["SIZE"]=scaler.fit_transform(df["TOTAL"])
Run Code Online (Sandbox Code Playgroud)
但是得到了 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.
我尝试了其他方法,例如创建列表,对其进行转换并将其附加回数据框等。
最简单的方法是什么?
谢谢!
选项1
sklearn
您一次又一次看到此问题,该错误确实应该指示您需要执行的操作。基本上,您在输入上缺少多余的尺寸。更改df["TOTAL"]为df[["TOTAL"]]。
df['SIZE'] = scaler.fit_transform(df[["TOTAL"]])
Run Code Online (Sandbox Code Playgroud)
df
TOTAL Name SIZE
0 3232 Jane 24.413959
1 382 Jack 10.000000
2 8291 Jones 50.000000
Run Code Online (Sandbox Code Playgroud)
选项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
Run Code Online (Sandbox Code Playgroud)
df
TOTAL Name SIZE
0 3232 Jane 24.413959
1 382 Jack 10.000000
2 8291 Jones 50.000000
Run Code Online (Sandbox Code Playgroud)
从本质上讲,这就是min-max缩放器的工作,但是却没有导入scikit学习的开销(除非必须这样做,否则不要这样做,因为它是一个繁重的库)。
如果您只想缩放数据框中的一列,则必须按如下方式重塑列值:
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
df['SIZE'] = scaler.fit_transform(df['TOTAL'].values.reshape(-1,1))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4607 次 |
| 最近记录: |