Seite 1 von 1

Spalten löschen mit nur einer Ausprägung

Verfasst: Donnerstag 4. Februar 2021, 19:19
von ribon431
NAbend,

ich habe ein dataframe mit ausschließlich Zahlen vorliegen.
Nun möchte ich Spalten mit nur einem Wert löschen.

Habe einen funktionierenden code geschrieben, der braucht jedoch sehr lange.
Ich habe auch gehört, dass man keine for schleifen nutzen sollte mit pandas.

Habt ihr vielleicht Verbesserungsvorschläge :?

Code: Alles auswählen

sp_a = df.shape[1]                                                              # Spaltenanzahl
z1=0
gel_sp = 0                                                                      # gelöschte Spalten Anzahl
for i in range (sp_a):                                                          # for Schleife zählt....
    c= i + (sp_a-1) -z1                                                         #        
    z1 += 2                                                                     #   ......hier rückwärts mit laufindex c
    if  len(df.iloc[:,c].value_counts(dropna=False))==1:                        # Bedingung: max. Ausprägung = 1
        sp_n= df.columns[c]                                                     # Spaltenname
        del df[sp_n]        
        gel_sp+=1         
print(gel_sp,' Spalten wurden gelöscht, weil nur eine Ausprägung !') 

Viele Grüße

Re: Spalten löschen mit nur einer Ausprägung

Verfasst: Donnerstag 4. Februar 2021, 19:29
von __deets__
Du kannst dir doch aus der Spalte einfach alle eindeutigen Werte geben lassen. unique muesste das sein. Und deren Anzahl dann feststellen.

Re: Spalten löschen mit nur einer Ausprägung

Verfasst: Donnerstag 4. Februar 2021, 20:17
von Sirius3
Eine Spalte ist gleich, wenn das Minimum gleich dem Maximum ist:

Code: Alles auswählen

column_with_one_value = df.max() == df.min()
Und damit kann man natürlich die Spalten filtern:

Code: Alles auswählen

df_filtered = df[df.columns[~column_with_one_value]]

Re: Spalten löschen mit nur einer Ausprägung

Verfasst: Freitag 5. Februar 2021, 09:31
von ribon431
Danke dir, das klappt wunderbar !

Sirius3 hat geschrieben: Donnerstag 4. Februar 2021, 20:17 Eine Spalte ist gleich, wenn das Minimum gleich dem Maximum ist:

Code: Alles auswählen

column_with_one_value = df.max() == df.min()
Und damit kann man natürlich die Spalten filtern:

Code: Alles auswählen

df_filtered = df[df.columns[~column_with_one_value]]
[/quote]