【问题标题】:Cannot convert the series to <class 'float'>无法将系列转换为 <class 'float'>
【发布时间】:2021-09-22 11:37:29
【问题描述】:

我有一张 pandas 表,我想做以下数学运算:

|label|  area | equivalent_diameter|  mean_intensity|  solidity|
---------------------------------------------------------------
   1    1011       35.878199           255.0          0.863365:
   2    107        11.672045           255.0          0.849206
   3     8         3.191538            76.0           0.800000
   4    18         4.787307            255.0          0.720000
   5    110        11.834541           255.0          0.769231
----------------------------------------------------------------

基本上我想:

df['area'] = math.sqrt(df['area]/math.pi)

TypeError: cannot convert the series to <class 'float'>

我做了什么并没有解决问题:

new_data = df['area'].apply(lambda x: float(x))

# and then:

new_x = new_data/math.pi
new_y = math.sqrt(new_x)

仍然报同样的错误。

【问题讨论】:

    标签: python-3.x pandas dataframe


    【解决方案1】:

    用 numpy 试试:

    import numpy as np
    df['area'] = np.sqrt(df['area']/np.pi)
    

    【讨论】:

    • 为什么它不适用于数学?谢谢,它适用于 numpy。
    • math 包含 Python 的标准类型,例如 int 和 float,当您使用它们时,解释器会推断出标准除法。那失败了,因为标准除法不适用于系列对象。当您有来自 pandas 数据帧的系列时,您需要使用适用于整个系列的矢量化操作,并且当您使用 np.pi 常量时,解释器会推断出这一点。通过使用 np.pi 常量,您是在说:请用 pi 划分系列中的每个元素。 np.sqrt 也是一样:请取系列中所有元素的 sqrt
    • 对不起,我误认为上面评论中的 math.pi 部分。这确实有效。但是 math.sqrt 不适用于该系列,仅适用于标准 python 浮点数和整数。
    【解决方案2】:

    您可以使用列表推导,然后将数据等同于您的数据框。请尝试以下代码:

    import pandas as pd
    import math
    d = {'label': [1, 2, 3, 4, 5], 'area': [1011, 107, 8, 18, 110],
     'equivalent_diameter': [35.878199, 11.672045, 3.191538, 4.787307, 11.834541],
     'mean_intensity': [255.0, 255.0, 76.0, 255.0, 255.0],
     'solidity': [0.863365, 0.849206, 0.800000, 0.720000, 0.769231]}
    df = pd.DataFrame(data=d)
    data = df['area']/math.pi
    df['area'] = [math.sqrt(i) for i in data]
    print(df)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-16
      相关资源
      最近更新 更多