【问题标题】:lambda function to scale column in pandas dataframe returns: "'float' object has no attribute 'min'"用于缩放熊猫数据框中列的 lambda 函数返回:“'float' 对象没有属性 'min'”
【发布时间】:2019-06-02 20:39:51
【问题描述】:

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

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

并得到以下错误信息:

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

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

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

我相信我遇到了一些非常基本的错误,希望有人能指出我正确的方向。

【问题讨论】:

标签: python pandas


【解决方案1】:

我认为这里没有必要应用,因为存在更快的矢量化解决方案 - 将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 在 cmets 中指出的那样,另一个解决方案是使用 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

【讨论】:

  • 刚刚试了一下,谢谢。事实上,我正在尝试实现 lambda 函数来验证我是否正确使用了 MinMaxScaler。结果匹配
  • @DarioRaffaele - 欢迎您!如果我的回答有帮助,请不要忘记accept。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-13
  • 1970-01-01
  • 2018-07-02
  • 2022-01-21
  • 2022-01-04
  • 2018-07-11
  • 1970-01-01
相关资源
最近更新 更多