我对编写python类真的很陌生。基本上,我正在尝试编写一个将在sklearn管道中使用的类。该类需要通过修改一些现有属性来向现有数据框添加两个属性。
代码:
import BaseEstimator and TransformerMixIn
from sklearn.base import BaseEstimator, TransformerMixin
population_ix, A_PM10_ix, A_PM25_ix = 15, 2, 3
class CombinedAttributes(BaseEstimator, TransformerMixin):
def __init__(self):
pass
def fit(self, X, y=None):
return self
def transform(self, X, y=None):
log_pop = np.log(X[:,population_ix])
pm = X[:, A_PM10_ix] * X[:,A_PM25_ix]
return np.c_[X, log_pop, pm]
attr_adder = CombinedAttributes()
env_extra_attribs = attr_adder.transform(environment.values)
这是我收到的错误消息:
AttributeError Traceback (most recent call last)
<ipython-input-66-e138b3c2e517> in <module>()
1 attr_adder = CombinedAttributes()
----> 2 env_extra_attribs = attr_adder.transform(environment.values)
<ipython-input-65-e4aac1c1930b> in transform(self, X, y)
11 return self
12 def transform(self, X, y=None):
---> 13 log_pop = np.log(X[:,population_ix])
14 pm = X[:, A_PM10_ix] * X[:,A_PM25_ix]
15 return np.c_[X, log_pop, pm]
AttributeError: 'float' object has no attribute 'log'</code>
我的问题是如何使对数转换在其中起作用。
此外,我也不确定100%如何在init
def中包含pass语句。再说一次,这是全新的,我很难找到我能理解的教程。
感谢您的任何帮助
答案 0 :(得分:1)
该错误消息基本上表明您试图调用.log()
方法是一个float
对象。由于您仅在对象np
上执行此操作,因此我认为您不小心在某个地方覆盖了导入的模块np
。您并未提供所有代码,尤其是没有MCVE,因此我只能猜测您可能在执行代码之前已分配了np
。
我建议您扫描代码中的此类行,或者以其他方式在问题中提供您的代码,或者创建一个显示问题的MCVE,以便我们重现。
答案 1 :(得分:1)
似乎您用float
值“覆盖”了导入的numpy模块。
在您的代码中搜索类似的内容:
np = 5.4
或任何其他类型的np =
。
另外,请确保您使用import numpy as np
正确导入了numpy,并且不包括来自未知/自写模块的任何已加星标的导入,例如from module_name import *
。
如果该模块中包含任何名为np
的变量,则可能会“覆盖”您的numpy模块导入。
通常,您应避免使用from module_name import *
导入模块。这几乎总是会引起麻烦。
答案 2 :(得分:0)
我怀疑函数内的environment.values
或X
是对象dtype数组。
In [195]: x = np.array([1.2, 2.3], object)
In [196]: np.sqrt(x)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-196-0b43c7e80401> in <module>()
----> 1 np.sqrt(x)
AttributeError: 'float' object has no attribute 'sqrt'
In [197]: (x+x)/2
Out[197]: array([1.2, 2.3], dtype=object)
In [198]: np.log(x)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-198-de666c833898> in <module>()
----> 1 np.log(x)
AttributeError: 'float' object has no attribute 'log'
我在另一个最近的答案AttributeError: 'Series' object has no attribute 'sqrt'
中对此进行了详细说明