我在price
列中有一个包含价格信息的时间序列。当我尝试使用列ln_price
的{{1}}创建新列ln
时,出现错误:
AttributeError:“浮动”对象没有属性“ log”
有人可以帮助我理解为什么会这样以及如何解决吗?
谢谢!
price
答案 0 :(得分:0)
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等。
您可以使用短绒棉绒捡起这种错误。
答案 1 :(得分:0)
问题不在您发布的代码之外。您的代码有效。至少如果我假设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}