635 Stimmen

Wie man Zeilen aus einem Pandas DataFrame basierend auf einem bedingten Ausdruck löscht

Ich habe einen Pandas DataFrame und möchte Zeilen daraus löschen, bei denen die Länge der Zeichenfolge in einer bestimmten Spalte größer als 2 ist.

Ich erwarte, dass ich dies tun kann (per diese Antwort ) :

df[(len(df['column name']) < 2)]

aber ich erhalte nur die Fehlermeldung:

KeyError: u'no item named False'

Was mache ich falsch?

(Anmerkung: Ich weiß, ich kann df.dropna() um Zeilen loszuwerden, die irgendwelche NaN aber ich habe nicht gesehen, wie man Zeilen auf der Grundlage eines bedingten Ausdrucks entfernt).

5voto

jayanti prasad Punkte 81

Wenn Sie Zeilen des Datenrahmens auf der Grundlage einer komplizierten Bedingung für den Spaltenwert löschen möchten, kann das Schreiben in der oben gezeigten Weise kompliziert sein. Ich habe die folgende einfachere Lösung, die immer funktioniert. Nehmen wir an, dass Sie die Spalte mit der Überschrift löschen wollen, also holen Sie sich diese Spalte zuerst in einer Liste.

text_data = df['name'].tolist()

Wenden Sie nun eine Funktion auf jedes Element der Liste an und fügen Sie diese in eine Pandareihe ein:

text_length = pd.Series([func(t) for t in text_data])

In meinem Fall habe ich nur versucht, die Anzahl der Token zu ermitteln:

text_length = pd.Series([len(t.split()) for t in text_data])

Fügen Sie nun eine zusätzliche Spalte mit den oben genannten Reihen in den Datenrahmen ein:

df = df.assign(text_length = text_length .values)

Jetzt können wir eine Bedingung auf die neue Spalte anwenden, wie zum Beispiel:

df = df[df.text_length  >  10]

def pass_filter(df, label, length, pass_type):

    text_data = df[label].tolist()

    text_length = pd.Series([len(t.split()) for t in text_data])

    df = df.assign(text_length = text_length .values)

    if pass_type == 'high':
        df = df[df.text_length  >  length]

    if pass_type == 'low':
        df = df[df.text_length  <  length]

    df = df.drop(columns=['text_length'])

    return df

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