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

olmpazwi  于 2023-08-05  发布在  其他
关注(0)|答案(2)|浏览(129)

我试图使用sklearn.LinearRegression找到大量短序列的对数斜率。数据是从pandas dataframe的行中提取的,看起来像:

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一起工作。有什么想法?

pw9qyyiw

pw9qyyiw1#

numpy.log10是一个“ufunc”,并且方法Series.apply(func)对numpy ufunc有一个特殊的测试,这使得test.apply(log10)等价于np.log10(test)。这意味着test(一个Pandas Series示例)被传递到log10test的数据类型是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

q7solyqu

q7solyqu2#

当我使用标准差(np.std)而不是np.log10时,也出现了类似的错误消息:
'属性错误:“numpy.float64”对象没有属性“sqrt”,
尽管我之前已经通过np.asarray(X)将Pandas对象X转换为numpy数组。
我可以通过应用上述解决方案来解决这个问题:

X = pd.read_excel('file.xls')
Y = np.asarray(X).astype(np.float64)
Z = np.std(Y,axis=0)

字符串

相关问题