我正在尝试使用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)
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实例),因此它尝试将计算分派到中的各个元素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。
| 归档时间: |
|
| 查看次数: |
20588 次 |
| 最近记录: |