【问题标题】:'Float' object has no attribute 'log'“浮动”对象没有属性“日志”
【发布时间】:2019-11-13 13:06:58
【问题描述】:

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

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

谁能帮我理解为什么会这样以及如何解决它?

谢谢!

df['ln_price'] = np.log(df['price'])

【问题讨论】:

标签: python-3.x pandas numpy logarithm


【解决方案1】:

正如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'

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

>>> np.log(s.astype('float64'))
0    0.0
dtype: float64

在你的情况下:

np.log(df['price'].astype('float'))

注意:您可以使用to_numeric 进行更多控制。


第一个/备选答案:

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

问题是:

import numpy as np
np = 1
np.log

是完全有效的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'

解决方法是不要使用np是变量名,或者其他流行的导入缩写pd或dt等。 您可以使用 linter 找出这种错误。

【讨论】:

  • 这可能是错误的来源,但不是唯一的来源。如果df['price'].dtypedtype('O')(即数据类型是object 而不是float64),也会发生错误。这在使用 Pandas 时并不罕见。
  • @WarrenWeckesser 好吧,无论哪种方式,我们都可以 100% 说问题不是您发布的代码的一部分。因为您的代码有效。
  • @Finomnis,我没有在这个问题中发布任何代码。你在说什么代码?
  • df['ln_price'] = np.log(df['price'])
  • 您假设 df 是一个带有 float 值的 Python 字典。当df 是 Pandas DataFrame 时,我可以创建一个重现错误的示例。在对问题的评论中查看我对链接到的问题的回答。
【解决方案2】:

问题出在您发布的代码之外。您的代码有效。至少如果我假设 df 是一个字典。但我不能假设其他任何事情,因为您的问题没有具体说明。

import numpy as np

df = {'price': 10.0}
df['ln_price'] = np.log(df['price'])

print(df)
{'price': 10.0, 'ln_price': 2.3025850929940459}

【讨论】:

  • dfpandas.DataFrame 的通用变量名。它的索引看起来很像字典。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-27
  • 2017-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多