用于缩放 Pandas 数据帧中列的 lambda 函数返回:"'float' object has no attribute 'min'"



我刚刚开始使用Python和机器学习,遇到了一个我自己或任何其他在线资源都无法解决的问题。我正在尝试通过以下方式使用 lambda 函数缩放 pandas 数据帧中的列:

X['col1'] = X['col1'].apply(lambda x: (x - x.min()) / (x.max() - x.min()))

并收到以下错误消息:

"

float"对象没有属性"min"

我尝试将数据类型转换为整数,并返回以下错误:

'int' 对象没有属性 'min'

我相信我犯了一些非常基本的错误,希望任何人都可以指出我正确的方向。

我认为

在这里应用是没有必要的,因为存在更快的矢量化解决方案 - 将x更改为第 X['col1'] 列:

X = pd.DataFrame({'col1': [100,10,1,20,10,-20,200]})
X['col2'] = (X['col1'] - X['col1'].min()) / (X['col1'].max() - X['col1'].min())
print (X)
   col1      col2
0   100  0.545455
1    10  0.136364
2     1  0.095455
3    20  0.181818
4    10  0.136364
5   -20  0.000000
6   200  1.000000

就像@meW评论中指出的那样,另一种解决方案是使用 MinMaxScaler

from sklearn import preprocessing
min_max_scaler = preprocessing.MinMaxScaler()
X['col2'] = min_max_scaler.fit_transform(X[['col1']])
print (X)
   col1      col2
0   100  0.545455
1    10  0.136364
2     1  0.095455
3    20  0.181818
4    10  0.136364
5   -20  0.000000
6   200  1.000000

检查下面的代码!

@ 如果.apply(--if--else,axis=0/1) !需要条件

@否则使用assign 方法,它也会产生相同的结果!

df=pd.DataFrame({'salary':[10,29,76,54,32]})
df.apply(lambda x: ((x-x.min())/(x.max()-x.min())) if x.name == 'salary' else x, axis=0)
df.assign(salary=lambda x: ((x['salary']-x['salary'].min() )/(x['salary'].max()-x['salary'].min()) ))

相关内容

最新更新