Ich habe einen großen Pandas Datenrahmen [df] mit Hunderten von Spaltennamen. Ich möchte alle Spalten mit über 50% NAN-Werten löschen, aber nur die Spalten, die im Spaltentitel das Wort "test" enthalten. Gibt es eine einfache Möglichkeit, dies zu tun & Vielen Dank für Ihre Hilfe!Drop Spalten mit ähnlichen Namen mit über 50% Nan in Pandas
Antwort
IIUC können Sie etwas tun:
In [122]:
df = pd.DataFrame({'test':np.NaN, 'asd':0,'test 1':[0,1,np.NaN,3,4]})
df
Out[122]:
asd test test 1
0 0 NaN 0.0
1 0 NaN 1.0
2 0 NaN NaN
3 0 NaN 3.0
4 0 NaN 4.0
In [138]:
cols = df.columns[df.columns.str.contains('test')]
to_remove = cols[df[cols].isnull().sum() > len(df)/2]
to_remove
Out[138]:
Index(['test'], dtype='object')
In [140]:
df.drop(to_remove, axis=1)
Out[140]:
asd test 1
0 0 0.0
1 0 1.0
2 0 NaN
3 0 3.0
4 0 4.0
Also erstens wir die Liste der cols erhalten, die 'Test' mit str.contains
enthalten:
In [142]:
df.columns[df.columns.str.contains('test')]
Out[142]:
Index(['test', 'test 1'], dtype='object')
dann testen wir diese Teilmenge für NaN
Werte unter Verwendung von [isnull
]:
In [143]:
df[cols].isnull()
Out[143]:
test test 1
0 True False
1 True False
2 True True
3 True False
4 True False
wenn w e sum
dies, wandelt es die Booleschen Werte 1 und 0 bis int:
In [145]:
df[cols].isnull().sum() > len(df)/2
Out[145]:
test True
test 1 False
dtype: bool
Wir können dann:
In [144]:
df[cols].isnull().sum()
Out[144]:
test 5
test 1 1
dtype: int64
wir durch den Vergleich dieser gegen die halbe Länge des df eine boolean Maske erstellen können dann filter dies, um die cols zu fallen:
In [146]:
cols[df[cols].isnull().sum() > len(df)/2]
Out[146]:
Index(['test'], dtype='object')
Das funktioniert perfekt - vielen Dank! – JoeyPython
Frage nur, ob ein ähnlicher Ansatz verwendet werden kann, um NANs mit 0 (ZERO) zu füllen? – JoeyPython
Sie meinen ['df.fillna (0)'] (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.fillna.html)? – EdChum
- 1. pandas dataframe drop Spalten nach Anzahl der nan
- 2. Spark-Drop colums mit 0 oder NaN
- 3. Ersetzt Räume mit NAN in Pandas Datenrahmen
- 4. Pandas - ersetzen NaN-Werte mit Werten aus anderen Spalten
- 5. Lokale Einheimische mit ähnlichen Namen
- 6. Pandas Füllen NaN mit Spaltenwerte
- 7. Pandas boolean Index mit NaN
- 8. Verwenden von Pandas DataFrame mit Spalten mit mehreren Namen
- 9. Schleife über Spalten mit unterschiedlichen Namen
- 10. Erstellen eines Pandas DataFrame aus Spalten anderer DataFrames mit ähnlichen Indizes
- 11. mit NaN Ersetzen Keine in Pandas
- 12. Abfrage für NaN und andere Namen in Pandas
- 13. Python Pandas schreiben auf SQL mit NaN-Werten
- 14. Tracelack mit Spalten in Pandas
- 15. Computing mit Spalten Pandas
- 16. pandas IndexError/TypeError Inkonsistenz mit NaN-Werten
- 17. htaccess Redirect Subdomain in Ordner mit ähnlichen Namen mit Subdomain
- 18. Pandas bedeuten über mehrere Spalten
- 19. Pandas Datareframe: Ersetzen NaN mit Zeile Durchschnitt
- 20. Pandas Dataframe ersetzen Leerzeichen mit NaN
- 21. Iterieren über Spalten mit for-Schleifen in Pandas Dataframe
- 22. Android Layout 50% 50% füllen mit Bild über es
- 23. Tab-Dateien in Pandas Datenrahmen nach Spalten mit fehlenden Kopfzeilen
- 24. Verketten Sie Spaltenwerte in Pandas DataFrame mit "NaN" -Werten
- 25. Verwenden Spalten aus der Tabelle mit Pandas
- 26. Füllung NaN-Werte in einem Pandas Datenrahmen bedingt auf den Werten von nicht-NaN Spalten
- 27. Pandas nehmen Wert von Spalten, wenn nicht NaN
- 28. pandas drop() - Fehler - Label [] nicht in Achse
- 29. Pandas verschachtelte Sortierung und NaN
- 30. Pandas Schwenkdatenrahmen mit ungleichen Spalten
Könnten Sie Beispiel Datenrahmen bieten? –
Auf diesem DF würden nur test12 und test13 gelöscht: [link] http://i64.tinypic.com/hry2w7.png – JoeyPython