ich habe einen Funktion geschrieben der 3 DataFrames übergeben werden. Ein Dataframe mit features X. Ein DataFrame mit Labels y. Und ein Dataframe (nenne ich im folgenden Z DataFrame) dessen Spalten dem Feature DataFrame X hinzugefügt werden sollen, wenn die die Spalten des Z Dataframes mit der Spalte des y Dataframes korrelieren.
kurz: wenn die Spalten des Z Dataframes mit dem y Dataframe korrelieren, dann werden die spalten des Z Dataframes dem X dataframe hinzugefügt
außerdem sollen die Namen der hinzugefügten spalten von Z in ein Array gespeichert werden. Das array soll ein attribut der klasse sein.
Ich habe probleme mit dem anhängen den Spalten vom Z DataFrame an das bestehende X DataFrame
- wenn ich np.hstack und bei np.append werden alle Spalten untereinander angefügt (wieso auch immer??)
- bei np.concatenate erscheint die Fehlermeldung: ValueError: all the input arrays must have same number of dimensions, but the array at index 0 has 2 dimension(s) and the array at index 1 has 1 dimension(s)
Die shape von den DataFrames sind
- von X Dataframe: (20640, 9) --> zu dem sollen die Spalten hinzugefügt werden
- von Z Dataframe: (20640, 2) --> die Spalten werden iteriert also ist der shape bei der zeile mit np.conatenate wahrscheinlich (20640, 1)
Ich sitze schon ziemlich lange dran und wäre endlos dankbar wenn mir jemand helfen könnte.
ich weiß nicht wie ich die Spalten sonst an das X Dataframe anhängen könnte
Mein Code
Code: Alles auswählen
# neue Spalte nur hinzfügen, wenn die Korrelation zwischen "median_house_value" (y Dataframe --> Label) und dem Attribut des Z Dataframes größer als 0.25 ist
from scipy import stats
class spaltenHinzufüger(BaseEstimator, TransformerMixin):
# leere liste angelegt. Der liste werden die Spaltennamen der hinzugefügten Spalten hinzugefügt
name_der_hinzugefügten_Spalten=[]
def __init__(self):
pass
def fit(self,X,y=None):
pass
def transform(self, X, y, dataframe_mit_neuen_attributen):
rückgabe = np.array(X)
for spalten in dataframe_mit_neuen_attributen:
# "spalten" ist der name einer Spalten. Spalte wird mit "dataframe_mit_neuen_attributen[spalten]" angesprochen
# korrelationen werden berechnet
spaer_korrelation = stats.spearmanr(dataframe_mit_neuen_attributen[spalten] ,y)
pear_korrelation = stats.pearsonr(dataframe_mit_neuen_attributen[spalten] ,y)
# abhängig von dem Wert der Korrelation werden die Spalten hinzugefügt oder nicht (wenn eines der Korrelation über 0.25 ist dann wird die spalte hinzugefügt)
if(spaer_korrelation.correlation > 0.25 or pear_korrelation[0] > 0.25):
#name der hinzuzufügenden Spalte wird in liste (=attribut der klasse) gespeichert
self.name_der_hinzugefügten_Spalten.append(spalten)
# rückgabe varibale wird spalte hinzugefügt
rückgabe= np.concatenate((rückgabe,dataframe_mit_neuen_attributen[spalten]),axis=1)
return rückgabe