Spalten löschen mit nur einer Ausprägung

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
ribon431
User
Beiträge: 9
Registriert: Donnerstag 4. Februar 2021, 14:50

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
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du kannst dir doch aus der Spalte einfach alle eindeutigen Werte geben lassen. unique muesste das sein. Und deren Anzahl dann feststellen.
Sirius3
User
Beiträge: 18221
Registriert: Sonntag 21. Oktober 2012, 17:20

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]]
ribon431
User
Beiträge: 9
Registriert: Donnerstag 4. Februar 2021, 14:50

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]
Antworten