2016-12-29 54 views
1

所以basicaly我想是使用此功能:通元组到功能

def __init__(self, myTuple: tuple): 

    for i in myTuple: 
     print(i[1]) 
     self.dzien_tyg = i[1] 
     self.godz_rozp = i[2] 
     self.ilosc_godz = i[3] 
     self.czestatliwosc = i[4] 
     self.id_prowadzacego = i[5] 
     self.id_sali = i[6] 
     self.id_przedmiotu = i[7] 
     self.rodzaj = i[8] 
     self.nr_grupy = i[9] 
     self.id_studia = i[10] 
     self.nr_semetru = i[11] 
     self.id_specjalnosci = i[12] 

使用此代码:

for row in df.iterrows(): 
    print(row) 
    object = Grupa(*row) 

什么我pycharms说:

TypeError: __init__() takes 2 positional arguments but 3 were given 

是如何“排“看:

(0, dzien  1 
godz   1 
ilosc  2 
tyg   0 
id_naucz 52 
id_sala  79 
id_prz  13 
rodz   W 
grupa  1 
id_st  13 
sem   1 
id_spec  0 
Name: 0, dtype: object) 

,我无法弄清楚哪里pycharms看到那些3个参数,以及如何解决它

+0

'row'有两个元素,所以当您调用'object = Grupa(* row)'时,那么y执行'Group .__ init __(object,row [0],row [1])' - 现在你看到3个参数。 – furas

回答

1

尝试更换*rowrow[1]

for row in df.iterrows(): 
    print(row) 
    object = Grupa(row[1]) 

当你iterrows(),每一行,你可以从打印中看到,是一个两元素元组,第一个元素是行索引,第二个元素是包含实际数据的Series对象,当您使用*row时,您将索引和系列对象传递给构造函数。但从__init__的定义来看,你似乎只想要行对象。


并且如果每一行将会是一个对象,那么你就不需要在for循环中__init__,以最小的改变你原来的代码:

def __init__(self, myTuple: tuple): 

    i = myTuple 
    print(i[1]) 
    self.dzien_tyg = i.iloc[0]  # be careful here when you index the Series object with 
    self.godz_rozp = i.iloc[1]  # integers, use iloc to access elements and also note 
    self.ilosc_godz = i.iloc[2] # the indices are zero based 
... 

或者,您可以更安全地访问实际索引:

def __init__(self, myTuple: tuple): 

    i = myTuple 
    print(i['dzien']) 
    self.dzien_tyg = i['dzien']  
    self.godz_rozp = i['godz']  
    self.ilosc_godz = i['ilosc']  
... 
+0

这真的很有帮助,非常感谢:> – Wesspe