2016-12-29 5 views
1

So basicaly, was ich will, ist diese Funktion nutzen:Pass Tupels in Funktion

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] 

diesen Code verwenden:

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

Was meine pycharms sagt:

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

wie ist " Zeile "suchen:

(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) 

Und ich kann es nicht herausfinden, wo sich pycharms diese drei Argumente sehen und wie man es beheben

+0

'row' hat zwei Elemente, also wenn Sie' object = Grupa (* row) 'dann y aufrufen ou führe 'Group .__ init __ (Objekt, Zeile [0], Zeile [1])' aus - und nun siehst du 3 Argumente. – furas

Antwort

1

Versuch zu ersetzen *row mit row[1]:

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

Wenn Sie iterrows(), jede Zeile, wie Sie kann aus dem Druck sehen, ist ein Tupel mit zwei Elementen, das erste Element ist der Zeilenindex, und das zweite Element ist ein Series-Objekt, das die tatsächlichen Daten enthält, wenn Sie *row verwenden übergeben Sie das Index- und Serienobjekt an den Konstruktor. Aber von __init__ Definition scheint es, dass Sie nur das Zeilenobjekt wollen.


Und auch wenn jede Zeile ein Objekt sein wird, dann müssen Sie nicht die for-Schleife in __init__, mit einer minimalen Änderung Ihrer ursprünglichen Code:

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 
... 

Alternativ können Sie sicherer mit dem tatsächlichen Index zugreifen:

+0

Das war sehr hilfreich, vielen Dank:> – Wesspe