'Float' 对象没有属性 'log'

Ton*_*ony 6 numpy logarithm python-3.x pandas

我在列中有一个包含价格信息的时间序列price。当我尝试ln_price通过取lnof 列创建新列时,price出现错误:

AttributeError: 'float' 对象没有属性 'log'

有人可以帮助我理解为什么会这样以及如何解决吗?

谢谢!

df['ln_price'] = np.log(df['price'])
Run Code Online (Sandbox Code Playgroud)

And*_*den 7

正如warren-weckesser所指出的,如果您使用 dtype 对象,这也可能发生(实际上这更可能是您面临的问题):

>>> s = pd.Series([1.0], dtype='object')
>>> s
0    1
dtype: object
>>> np.log(s)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'float' object has no attribute 'log'
Run Code Online (Sandbox Code Playgroud)

您可以通过将 dtype 显式设置为 float 来解决此问题:

>>> np.log(s.astype('float64'))
0    0.0
dtype: float64
Run Code Online (Sandbox Code Playgroud)

在你的情况下:

np.log(df['price'].astype('float'))
Run Code Online (Sandbox Code Playgroud)

注意:您可以使用to_numeric.


第一个/替代答案:

np在范围内有一个浮点变量。

问题在于:

import numpy as np
np = 1
np.log
Run Code Online (Sandbox Code Playgroud)

是完全有效的python。

>>> import numpy as np
>>> np = 1.
>>> np.log
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'float' object has no attribute 'log'
Run Code Online (Sandbox Code Playgroud)

解决方案是不使用np变量名或其他流行的导入缩写 pd 或 dt 等。您可以使用 linter 来挑选此类错误。