目前正在尝试实施遗传算法。我已经构建了一个Python类Gene 我正在尝试从数据框 df
加载对象 Geneclass Gene:
def __init__(self,id,nb_trax,nb_days):
self.id=id
self.nb_trax=nb_trax
self.nb_days=nb_days
然后创建另一个对象 Chrom
class Chromosome(object):
def __init__(self):
self.port = [Gene() for id in range(20)]
第二类染色体,含有20个Gene对象作为其属性 这是数据框
ID nb_obj nb_days
ECGYE 10259 62.965318
NLRTM 8007 46.550562
我使用
成功加载了Genetester=df.apply(lambda row: Gene(row['Injection Port'],row['Avg Daily Injection'],random.randint(1,10)), axis=1)
但是我无法使用
加载 Chrom 类f=Chromosome(tester)
我收到此错误
Traceback (most recent call last):
File "chrom.py", line 27, in <module>
f=Chromosome(tester)
TypeError: __init__() takes 1 positional argument but 2 were given
请帮忙吗?
答案 0 :(得分:1)
该错误具有误导性,因为它说__init__
需要1个位置参数(来自类self
的对象的Chromosome
)。
其次,您从df
tester
的操作获得的内容实际上是DataFrame
索引为df
,其中包含一列Gene
值。
要解决此问题,您必须按以下方式更改代码:
class Chromosome(object):
def __init__(self, df):
self.port = [Gene() for id in range(20)]
self.xxx = list(df)