【问题标题】:'float' object is not iterable applying lambda funtion'float' 对象不可迭代应用 lambda 函数
【发布时间】:2020-08-29 11:29:24
【问题描述】:

我在应用这个 lambda 函数时遇到了这个问题:

stack['norm_val'] = stack.value.apply(lambda x : (x-min(x))/(max(x)-min(x)), axis=1)

我收到以下错误:

TypeError: 'float' object is not iterable

数据集下方

   stack = pd.DataFrame([['AAA', 22.232513666152954],
       ['BBB', 3.2749810218811035],
       ['CCC', 116.79930114746094],
       ['DDD', 23.851191759109497],
       ['EEE', 75.8379271030426]], columns = (['name','value']))

预期结果应该是数据框“norm_val”中具有标准化值的新列

   [0.16699094],
   [0.        ],
   [1.        ],
   [0.18124936],
   [0.63918415]

问题是,我猜这些值是浮点数,如何迭代这些值并应用 lambda 函数?

有什么想法吗?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    在您使用标量的解决方案中,因此无法使用 minmax 函数。

    在 pandas 中,您可以使用 Series 之类的列,因此请使用 Series.minSeries.max 来规范化列:

    stack['norm_val'] = (stack['value']-stack['value'].min())/
                        (stack['value'].max()-stack['value'].min())
    print (stack)
      name       value  norm_val
    0  AAA   22.232514  0.166991
    1  BBB    3.274981  0.000000
    2  CCC  116.799301  1.000000
    3  DDD   23.851192  0.181249
    4  EEE   75.837927  0.639184
    

    或者:

    from sklearn import preprocessing
    
    x = stack[['value']].to_numpy()
    min_max_scaler = preprocessing.MinMaxScaler()
    stack['norm_val'] = min_max_scaler.fit_transform(x)
    

    【讨论】:

    • 我想我需要休息一下;)
    猜你喜欢
    • 1970-01-01
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-14
    • 1970-01-01
    相关资源
    最近更新 更多