Heim  >  Artikel  >  Backend-Entwicklung  >  Warum führt die Verwendung der Operatoren AND (`&`) und OR (`|`) in Pandas-Filtervorgängen zu unerwarteten Ergebnissen?

Warum führt die Verwendung der Operatoren AND (`&`) und OR (`|`) in Pandas-Filtervorgängen zu unerwarteten Ergebnissen?

Susan Sarandon
Susan SarandonOriginal
2024-10-25 06:55:28734Durchsuche

Why Does Using AND (`&`) and OR (`|`) Operators in Pandas Filtering Operations Produce Unexpected Results?

Pandas: Mehrere Bedingungen beim Indizieren von Datenrahmen – unerwartetes Verhalten

In der Datenanalyse ist Pandas eine entscheidende Bibliothek für die Manipulation und Verarbeitung von Datenrahmen. Bei der Durchführung von Filtervorgängen ist es wichtig, das Verhalten von Operatoren zu verstehen, wenn mehrere Bedingungen verwendet werden.

Betrachten wir ein Szenario, in dem wir Zeilen in einem Datenrahmen basierend auf Werten in zwei Spalten „a“ und „filtern“ möchten. B'. Verwendung des AND-Operators „&“ und des OR-Operators „|“ Wir erwarten, dass AND Zeilen löscht, in denen mindestens ein Wert gleich -1 ist, während OR Zeilen beibehalten soll, in denen beide Werte -1 sind.

<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>

Unerwarteterweise löscht der AND-Operator jede Zeile, in der mindestens ein Wert vorhanden ist ist -1, während der ODER-Operator erfordert, dass beide Werte -1 sind, um sie zu löschen.

Der Schlüssel zum Verständnis dieses Verhaltens liegt darin, sich daran zu erinnern, dass wir die Bedingung in Bezug auf das schreiben, was wir behalten möchten. nicht das, was wir löschen wollen.

  • Für df1: (df.a != -1) & (df.b != -1) bedeutet „Zeilen behalten, wo df.a nicht ist - 1 und df.b ist nicht -1", was dem Löschen von Zeilen entspricht, in denen mindestens ein Wert -1 ist.
  • Für df2: (df.a != -1) | (df.b != -1) bedeutet „Zeilen beibehalten, bei denen entweder df.a oder df.b nicht -1 ist“, was dem Löschen von Zeilen entspricht, bei denen beide Werte -1 sind.

Es ist wichtig, verketteten Zugriff wie df.loc und df.iloc anstelle von df['a'][1] = -1 zu verwenden, um potenzielle Probleme zu vermeiden.

Das obige ist der detaillierte Inhalt vonWarum führt die Verwendung der Operatoren AND (`&`) und OR (`|`) in Pandas-Filtervorgängen zu unerwarteten Ergebnissen?. 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