Объект 'Float' не имеет атрибута 'log' - PullRequest
1 голос
/ 03 июля 2019

У меня есть временной ряд с информацией о ценах в столбце price. Когда я попытался создать новый столбец ln_price, взяв ln столбца price, я получил ошибку:

AttributeError: у объекта 'float' нет атрибута 'log'

Может кто-нибудь помочь мне понять, почему это так и как это можно исправить?

Спасибо!

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

Ответы [ 2 ]

0 голосов
/ 03 июля 2019

Проблема за пределами кода, который вы опубликовали. Ваш код работает. По крайней мере, если я предположу, что 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}
0 голосов
/ 03 июля 2019

Как указывает 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.


Первый / альтернативный ответ:

У вас есть переменная типа float 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,

...