从数据框

时间:2018-01-17 10:54:00

标签: python pandas oop dataframe genetic-algorithm

目前正在尝试实施遗传算法。我已经构建了一个Python类Gene 我正在尝试从数据框 df

加载对象 Gene
class 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

我使用

成功加载了Gene
tester=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

请帮忙吗?

1 个答案:

答案 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)
相关问题