Entfernen von Ausreißern in Pandas DataFrame mit Perzentilen
Ich habe einen DataFrame df mit 40 Spalten und sehr vielen Datensätzen.
df:
User_id | Col1 | Col2 | Col3 | Col4 | Col5 | Col6 | Col7 |...| Col39
Für jede Spalte außer die user_id-Spalte die ich überprüfen möchten Ausreißer und entfernen Sie das Loch Aufzeichnung, wenn ein Ausreißer erscheint.
Zur ausreißererkennung auf jede Zeile, die ich beschlossen, einfach zu benutzen, 5. und 95 Perzentile (ich weiß, es ist nicht die beste statistische Methode):
Code was ich habe, so weit:
P = np.percentile(df.Col1, [5, 95])
new_df = df[(df.Col1 > P[0]) & (df.Col1 < P[1])]
Frage: Wie kann ich diesen Ansatz anwenden, um alle Spalten (außer user_id), ohne dies per hand? Mein Ziel ist es, ein dataframe ohne Aufzeichnungen hatte, dass die Ausreißer.
Danke!
InformationsquelleAutor Mi Funk | 2016-03-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dem ursprünglichen Datensatz.
Ersten entfernen der
User_id
SpalteDann, computing Perzentile.
Weiter filtern von Werten aufgrund der berechneten Perzentile. Zu tun, dass ich einen
apply
durch Spalten und das ist es !Bringen die
User_id
zurück.Letzten Zeilen mit
NaN
Werte können gelöscht werden, einfach so.Prüfung Ergebnis
, Wie zu generieren der test-dataset
Super!!! Ich sehe keinen Unterschied zwischen den beiden lambda-außer dem Zeilenvorschub.
Ich enthalten die oberen und unteren Grenzen mit ">=" und "<=" anstelle von ">" und "<".
Nach dem,, warum sind wir immer viel von "NaN", die es nicht im original-Datensatz. Wie können wir damit umgehen?
InformationsquelleAutor Romain
Was Sie beschreiben, ist ähnlich wie der Prozess der winsorizing, schneidet die Werte für das 5. und 95. Perzentile, anstatt Sie zu eliminieren vollständig aus.
Hier ein Beispiel:
InformationsquelleAutor mgoldwasser
Verwenden Sie eine innere Verknüpfung. So etwas sollte funktionieren
InformationsquelleAutor Rishabh Srivastava