我正在尝试使用 sklearn.LinearRegression 找到大量短序列的对数斜率。数据是从 pandas 数据框的行中提取的,看起来像:
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
但是,当我尝试在系列中使用 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'
我不确定为什么会出现此错误,np.log10应该与我所看到的 numpy.float64 一起工作。想法?
请您参考如下方法:
numpy.log10 是一个“ufunc”,Series.apply(func) 方法对 numpy ufuncs 进行了特殊测试,这使得 test.apply (log10) 相当于 np.log10(test)。这意味着 test,一个 Pandas Series 实例,被传递给 log10。 test的数据类型是object,也就是说test中的元素可以是任意的Python对象。 np.log10 不知道如何处理这样的对象集合(它不知道这些对象实际上是所有 np.float64 实例),因此它会尝试将计算分派(dispatch)给 Series 中的各个元素。为此,它希望元素本身具有 log10 方法。这就是错误发生的时候:Series 中的元素(在本例中为 np.float64 实例)没有 log10 方法。
应该做你想做的几个替代表达式是 np.log10(test.astype(np.float64)) 或 test.astype(np.float64).apply(np .log10)。本质部分是 test.astype(np.float64) 将 Series 对象的数据类型从 object 转换为 np. float64.
