Warum behält die Verwendung des OR-Operators bei der Pandas-Indizierung Zeilen mit -1-Werten bei, während der AND-Operator sie verwirft, was im Widerspruch zu intuitiven Erwartungen steht?

Susan Sarandon
Freigeben: 2024-10-26 05:47:31
Original
891 Leute haben es durchsucht

Why does using the OR operator in pandas indexing retain rows with -1 values, while the AND operator discards them, contradicting intuitive expectations?

Pandas: Mehrere Bedingungen beim Indizieren eines Datenrahmens – nicht intuitives Verhalten

Beim Auswählen von Zeilen aus einem Datenrahmen basierend auf Bedingungen, die mehrere umfassen Spalten können Benutzer auf unerwartetes Verhalten stoßen. Insbesondere scheinen sich die OR- und AND-Operatoren entgegengesetzt zu ihren erwarteten Rollen zu verhalten.

Betrachten Sie den folgenden Code:

<code class="python">import pandas as pd

df = pd.DataFrame({'a': range(5), 'b': range(5) })

# Insert -1 values
df.loc[1, 'a'] = -1
df.loc[1, 'b'] = -1
df.loc[3, 'a'] = -1
df.loc[4, 'b'] = -1

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

df_combined = pd.concat([df, df1, df2], axis=1, keys=['Original', 'AND', 'OR'])

print(df_combined)</code>
Nach dem Login kopieren

Ergebnisse:

<code class="python">   Original  AND  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</code>
Nach dem Login kopieren

Wie beobachtet , Zeilen, in denen einer oder beide Werte -1 sind, bleiben erhalten, wenn der ODER-Operator verwendet wird (df2), während Zeilen mit einem beliebigen -1-Wert verworfen werden, wenn der UND-Operator verwendet wird (df1). Dieses Verhalten widerspricht intuitiven Erwartungen.

Erklärung

Das scheinbar umgekehrte Verhalten ergibt sich aus der Perspektive, die im jeweiligen Zustand des Bedieners eingenommen wird. Für den AND-Operator:

<code class="python">(df.a != -1) & (df.b != -1)</code>
Nach dem Login kopieren

Die Bedingung lautet „Zeilen beibehalten, in denen sich sowohl df.a als auch df.b von -1 unterscheiden“, wodurch Zeilen mit mindestens einem -1-Wert effektiv ausgeschlossen werden.

Umgekehrt gilt für den OR-Operator:

<code class="python">(df.a != -1) | (df.b != -1)</code>
Nach dem Login kopieren

Leseweise „Zeilen beibehalten, in denen entweder df.a oder df.b von -1 abweicht“, wodurch Zeilen effektiv ausgeschlossen werden, in denen beide Werte -1 sind.

Daher steht das Verhalten im Einklang mit der Absicht, Zeilen zum Beibehalten und nicht zum Ausschließen auszuwählen.

Hinweis zum verketteten Zugriff

Der Codeausschnitt df ['a'][1] = -1 zum Ändern von Zellwerten ist nicht ratsam. Aus Gründen der Klarheit und Konsistenz wird empfohlen, stattdessen df.loc[1, 'a'] = -1 oder df.iloc[1, 0] = -1 zu verwenden.

Das obige ist der detaillierte Inhalt vonWarum behält die Verwendung des OR-Operators bei der Pandas-Indizierung Zeilen mit -1-Werten bei, während der AND-Operator sie verwirft, was im Widerspruch zu intuitiven Erwartungen steht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!