AttributeError:“ numpy.float64”对象没有属性“ log10”

Wol*_*Ves 1 python numpy

我正在尝试使用sklearn.LinearRegression查找大量短序列的对数斜率。数据是从熊猫数据框的行中提取的,如下所示:

bp01    1.12
bp02    1.12
bp03    1.08
bp04    0.99
bp05    1.08
bp06    1.19
bp07    1.17
bp08    1.05
bp09     0.8
bp10    0.96
bp11    0.97
bp12    1.12
bp13    0.91
bp14    0.96
bp15    1.05
bp16    0.93
bp17    0.97
bp18    0.92
bp19    0.89
bp20       0
Name: 42029, dtype: object
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用np.log10时,在该系列上出现以下错误:

In[27]: test.apply(np.log10)
Traceback (most recent call last):

  File "<ipython-input-27-bccff3ed525b>", line 1, in <module>
    test.apply(np.log10)

  File "C:\location", line 2348, in apply
    return f(self)

AttributeError: 'numpy.float64' object has no attribute 'log10'
Run Code Online (Sandbox Code Playgroud)

我不确定为什么会出现此错误,根据我所看到的,np.log10是否可以与numpy.float64一起使用。有想法吗?

War*_*ser 7

numpy.log10是“ ufunc”,并且该方法Series.apply(func)对numpy ufuncs进行了特殊测试,使其test.apply(log10)等效于np.log10(test)。这意味着将test一个Pandas Series实例传递给log10。的数据类型testobject,这意味着中的元素test可以是任意Python对象。np.log10不知道如何处理这样的对象集合(它不“知道”这些对象实际上是所有np.float64实例),因此它尝试将计算分派到中的各个元素Series。为此,它希望元素本身具有log10方法。这就是发生错误的时间Series:(在这种情况下,np.float64实例)中的元素没有log10方法。

一对夫妇的另一种表达应该做你想做的是np.log10(test.astype(np.float64))test.astype(np.float64).apply(np.log10)。基本部分是 test.astype(np.float64)Series对象的数据类型从转换objectnp.float64