2016-12-29 45 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