Rückgabe einer .transform Methode in ein Dataframe umwandeln

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
nichtSoGuter
User
Beiträge: 92
Registriert: Mittwoch 13. April 2022, 17:40

Guten Tag,

ich habe eine transform Methode geschrieben, der ein Dataframe übergeben wird.
Dieser Dataframe wird dann in ein np.array umgewandelt.
Dann werden Rechenoperationen zwischen den Spalten durchgeführt und in einer neuen Spalte gespeichert.
Also erhalte ich am ende einen np.array, welcher mehr Spalten hat als der np.array der am Ende zurückgegeben wird.

Nun möchte ich das zurückgegebene array mit den zusätzlichen Spalten in ein Dataframe umwandeln. wie stelle ich das an? (siehe Code 1)

CODE 1

Code: Alles auswählen

    # Transform methode gibt Array zurück (kein Dataframe!)
    def transform(self, X, y = None):
       
        # von dem übergebene Parameter (X = np.array)  sollen die Spalten von einander dividiert werden 
        # und in einer anderen Spalte gespeichert werden
        # dann wird am ende das übergebene Array mit den zusätzlichen Spalten zurückgegeben
     
         # Folgende Spalten soll in das Dataframe aufgenommen werden
        schlafzimmerProHaushaltSpalte = X[:,bedroom_index]/X[:,households_index]
        zimmerProHaushaltSpalte = X[:,room_index]/X.values[:,households_index]
       
            return np.c_[X, schlafzimmerProHaushaltspalte ,zimmerProHaushalt]   
Die Frage ist nun wie ich das zurückgegebene Array in ein Dataframe umwandele
Meine Idee war (siehe Code 2)

Code 2

Code: Alles auswählen

  
  # der Parameter der in die Methode übergeben werden soll heißt "übergebener_Dataframe"
  # am ende sollen die zusätzlichen Spalten, die in der Methode berechnet werden, an  "übergebener_Dataframe" angehängt werden
  rückgabe_der_Methode =attribut_adder.transform( übergebener_Dataframe )
  rückgabe_als_Dataframe = pd.DataFrame( übergebener_Dataframe , index = übergebener_Dataframe .index, columns = übergebener_Dataframe .columns)
  
Das Problem bei dem Code 2 ist, dass die zusätzlichen Spalten nicht angezeigt werden
Zuletzt geändert von nichtSoGuter am Montag 18. April 2022, 17:17, insgesamt 3-mal geändert.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wie unterscheidet sich das denn von deinem ersten Post? Und dem, was dir da geraten wurde in Bezug auf die Dokumentation, und den Hinweis, was du *konkret* versucht hast, und was dann nicht so klappt wie gewuenscht?

Denn mit diesem Post, der sogar noch weniger Details enthaelt, kann man da auch nicht mehr zu sagen.
nichtSoGuter
User
Beiträge: 92
Registriert: Mittwoch 13. April 2022, 17:40

Danke für deine Rückmeldung!

Das Problem aus meinem ersten Post habe ich dann doch lösen können. Das Problem hier ist ein anderer.
Ich möchte die zusätzlichen Spalten des np.arrays in das Dataframe mit aufnehmen.
Ich habe den Post nochmal überarbeitet. Soll ich noch konkreter werden oder passt das so?
nichtSoGuter
User
Beiträge: 92
Registriert: Mittwoch 13. April 2022, 17:40

nichtSoGuter hat geschrieben: Montag 18. April 2022, 16:48 Guten Tag,

ich habe eine transform Methode geschrieben, der ein Dataframe übergeben wird.
Dieser Dataframe wird dann in ein np.array umgewandelt.
Dann werden Rechenoperationen zwischen den Spalten durchgeführt und in einer neuen Spalte gespeichert.
Also erhalte ich am ende einen np.array, welcher mehr Spalten hat als der np.array der am Ende zurückgegeben wird.

Nun möchte ich das zurückgegebene array mit den zusätzlichen Spalten in ein Dataframe umwandeln. wie stelle ich das an? (siehe Code 1)

CODE 1

Code: Alles auswählen

    # Transform methode gibt Array zurück (kein Dataframe!)
    def transform(self, X, y = None):
       
        # von dem übergebene Parameter (X = np.array)  sollen die Spalten von einander dividiert werden 
        # und in einer anderen Spalte gespeichert werden
        # dann wird am ende das übergebene Array mit den zusätzlichen Spalten zurückgegeben
     
         # Folgende Spalten soll in das Dataframe aufgenommen werden
        schlafzimmerProHaushaltSpalte = X[:,bedroom_index]/X[:,households_index]
        zimmerProHaushaltSpalte = X[:,room_index]/X[:,households_index]
       
            return np.c_[X, schlafzimmerProHaushaltspalte ,zimmerProHaushalt]   
Die Frage ist nun wie ich das zurückgegebene Array in ein Dataframe umwandele
Meine Idee war (siehe Code 2)

Code 2

Code: Alles auswählen

  
  # der Parameter der in die Methode übergeben werden soll heißt "übergebener_Dataframe"
  # am ende sollen die zusätzlichen Spalten, die in der Methode berechnet werden, an  "übergebener_Dataframe" angehängt werden
  rückgabe_der_Methode =attribut_adder.transform( übergebener_Dataframe )
  rückgabe_als_Dataframe = pd.DataFrame( rückgabe_der_Methode , index = übergebener_Dataframe .index, columns = [übergebener_Dataframe.columns, "zusätzlicher_Spaltenname1", "zusätzlicher_Spaltenname2" ])
  
Das ist der Fehler der bei mir angezeigt wird : ValueError: Shape of passed values is (16512, 13), indices imply (16512, 4)
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Laut Fehlermeldung musst du einfach nur den Index weglassen, reicht da nicht ein simples

Code: Alles auswählen

pd.DataFrame(rueckgabe_der_methode)
Das ist im uebrigen ein wirklich schlechter Name. Genauso wie "transform". Viel generischer geht's ja nicht mehr, das wird auf Dauer schwer fuer dich, da den Ueberblick zu behalten.
nichtSoGuter
User
Beiträge: 92
Registriert: Mittwoch 13. April 2022, 17:40

Danke!
Ich habs mir wohl unnötig schwer gemacht😅
nichtSoGuter
User
Beiträge: 92
Registriert: Mittwoch 13. April 2022, 17:40

Das Problem bei dem vorgehen ist aber leider, dass ich dann nicht mehr weiß was zu welcher spalte gehört.
Wie kann ich die spaltennamen aus dem alten DataFrame beibehalten und nur die hinzugefügten Spalten neu benennen?
Bei dem beispiel wüsste ich ja zb nicht welche spalte die "schlafzimmerProHaushaltSpalte" ist.
Man könnte das hier bei dem beispiel vielleicht leicht herausfinden. Bei anderen fällen wäre das aber vielleicht gar nicht soo einfach.
Wenn ich zb die methode OneHotEncoder anwenden würde, dann würde die funktion für jede kategorie eine neue Spalte hinzufügen. Woher würde ich dann wissen welche spalte zu welcher kategorie gehört
Antworten