Heim >Backend-Entwicklung >Python-Tutorial >Warum scheinen die Operatoren AND (&) und OR (|) von Pandas umgekehrt zu sein, wenn ein DataFrame mit mehreren Bedingungen indiziert wird?

Warum scheinen die Operatoren AND (&) und OR (|) von Pandas umgekehrt zu sein, wenn ein DataFrame mit mehreren Bedingungen indiziert wird?

Linda Hamilton
Linda HamiltonOriginal
2024-10-25 16:30:09729Durchsuche

Why Does Pandas' AND (&) and OR (|) Operators Seem Reversed When Indexing a DataFrame with Multiple Conditions?

Pandas: Unerwartetes Verhalten mit mehreren Bedingungen beim Indizieren des Datenrahmens

Beim Filtern von Zeilen in einem Datenrahmen nach Werten in mehreren Spalten ist es wichtig, Folgendes zu tun Verstehen Sie das Verhalten der Operatoren AND (&) und OR (|).

In einer kürzlich durchgeführten Beobachtung wurde festgestellt, dass das Verhalten dieser Operatoren umgekehrt zu sein schien. Der OR-Operator schien sich wie der AND-Operator zu verhalten und umgekehrt.

Betrachten Sie zur Veranschaulichung den folgenden DataFrame:

<code class="python">df = pd.DataFrame({'a': range(5), 'b': range(5) })

# Insert -1 values
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>

Das Ergebnis ist:

<code class="python">      Original df      Using AND (&)      Using OR (|)    
             a  b              a   b             a   b
0            0  0              0   0             0   0
1           -1 -1            NaN NaN           NaN NaN
2            2  2              2   2             2   2
3           -1  3            NaN NaN            -1   3
4            4 -1            NaN NaN             4  -1

[5 rows x 6 columns]</code>

Wie in der Ausgabe zu sehen ist, löscht der AND-Operator Zeilen, in denen mindestens ein Wert -1 ist, während der OR-Operator Zeilen beibehält, in denen beide Werte nicht -1 sind.

Dieses Verhalten mag kontraintuitiv erscheinen, macht es aber Sinn, wenn wir uns daran erinnern, dass wir die Bedingungen für Zeilen angeben, die wir behalten und nicht löschen möchten.

  • Für df1 geben wir an, dass wir Zeilen dort behalten möchten sowohl df.a als auch df.b sind nicht -1.
  • Für df2 geben wir an, dass wir Zeilen behalten möchten, in denen entweder df.a oder df.b ist nicht -1.

Daher ist das beobachtete Verhalten korrekt.

Das obige ist der detaillierte Inhalt vonWarum scheinen die Operatoren AND (&) und OR (|) von Pandas umgekehrt zu sein, wenn ein DataFrame mit mehreren Bedingungen indiziert wird?. 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