394 Stimmen

Erkennen und Ausschließen von Ausreißern in einem Pandas DataFrame

Ich habe ein Pandas-Datenrahmen mit wenigen Spalten. Jetzt weiß ich, dass bestimmte Zeilen Ausreißer basierend auf einem bestimmten Spaltenwert sind. Zum Beispiel hat die Spalte Vol alle Werte um 12xx und ein Wert ist 4000 (Ausreißer). Ich möchte diese Zeilen ausschließen, die die Spalte Vol haben.

Also muss ich im Grunde einen Filter auf den Datenrahmen setzen, so dass wir alle Zeilen auswählen, in denen die Werte einer bestimmten Spalte innerhalb, sagen wir, 3 Standardabweichungen vom Mittelwert liegen.

Wie kann man das elegant erreichen?

2voto

luminousmen Punkte 1651

Meine Funktion zum Entfernen von Ausreißern

def drop_outliers(df, field_name):
    distance = 1.5 * (np.percentile(df[field_name], 75) - np.percentile(df[field_name], 25))
    df.drop(df[df[field_name] > distance + np.percentile(df[field_name], 75)].index, inplace=True)
    df.drop(df[df[field_name] < np.percentile(df[field_name], 25) - distance].index, inplace=True)

2voto

tnf Punkte 303

Ich ziehe es vor zu clippen statt zu droppen. Das folgende wird am 2. und 98. Perzentil festgeklemmt.

df_list = list(df)
minPercentile = 0.02
maxPercentile = 0.98

for _ in range(numCols):
    df[df_list[_]] = df[df_list[_]].clip((df[df_list[_]].quantile(minPercentile)),(df[df_list[_]].quantile(maxPercentile)))

-4voto

Löschen und Aussortieren von Ausreißern halte ich statistisch für falsch. Es verändert die Daten im Vergleich zu den Originaldaten. Es führt auch dazu, dass die Daten ungleich geformt sind, daher ist der beste Weg, den Effekt der Ausreißer zu reduzieren oder zu vermeiden, indem man die Daten logarithmisch transformiert. Das hat bei mir funktioniert:

np.log(data.iloc[:, :])

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X