Heim  >  Artikel  >  Backend-Entwicklung  >  Warum zeigt die Pandas-Indizierung mit mehreren Bedingungen unerwartetes Verhalten?

Warum zeigt die Pandas-Indizierung mit mehreren Bedingungen unerwartetes Verhalten?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-25 09:47:02156Durchsuche

Why Does Pandas Indexing with Multiple Conditions Exhibit Unexpected Behavior?

Pandas Multiple Conditions Indexing: Unerwartetes Verhalten

Bei Pandas ist das Anwenden von Filtern auf einen DataFrame ein häufiger Vorgang. Bei Verwendung mehrerer Bedingungen, insbesondere bei logischen Operatoren wie AND und OR, können jedoch unerwartete Ergebnisse auftreten.

Problem:

Beim Filtern von Zeilen basierend auf Werten in zwei Spalten , scheint sich der AND-Operator wie OR zu verhalten und umgekehrt. Der folgende Code sollte beispielsweise:

  • Verwenden Sie den UND-Operator, um Zeilen auszuschließen, in denen einer der Spaltenwerte -1 ist.
  • Verwenden Sie den ODER-Operator, um Zeilen auszuschließen, in denen beide Spaltenwerte vorliegen -1.
<code class="python">df = pd.DataFrame({'a': range(5), 'b': range(5) })

df['a'][1] = -1
df['b'][1] = -1
df['a'][3] = -1
df['b'][4] = -1

df1 = df[(df.a != -1) & (df.b != -1)]
df2 = df[(df.a != -1) | (df.b != -1)]

print(pd.concat([df, df1, df2], axis=1,
                keys=['original df', 'using AND (&)', 'using OR (|)',]))</code>

Erklärung:

Das unerwartete Verhalten ist darauf zurückzuführen, wie die logischen Operatoren im Kontext der Pandas-Indizierung interpretiert werden.

  • AND-Operator:

    • df[(df.a != -1) & (df.b != -1)] bedeutet „Zeilen beibehalten, in denen df.a nicht -1 und df.b nicht -1 ist.“
    • Dies filtert Zeilen heraus, in denen mindestens ein Wert -1 ist.
  • OR-Operator:

    • df[(df.a != -1) | (df.b != -1)] bedeutet „Zeilen beibehalten, in denen entweder df.a oder df.b nicht -1 ist“.
    • Dies filtert Zeilen heraus, in denen beide Werte -1 sind.

Daher verhält sich der AND-Operator wie OR, da er Zeilen aufgrund des Fehlens von -1 in einer Spalte ausschließt. Umgekehrt verhält sich der OR-Operator wie AND, da er Zeilen nur dann einschließt, wenn beide Spalten nicht -1 enthalten.

Zusätzlicher Hinweis:

  • Die Verwendung wird empfohlen .loc und .iloc anstelle der verketteten Indizierung (z. B. df'a' = -1) für sauberere und sicherere Codepraktiken.

Das obige ist der detaillierte Inhalt vonWarum zeigt die Pandas-Indizierung mit mehreren Bedingungen unerwartetes Verhalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn