Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah operator AND (&) dalam panda berkelakuan seperti operator OR (|) apabila menapis bingkai data mengikut berbilang keadaan?

Mengapakah operator AND (&) dalam panda berkelakuan seperti operator OR (|) apabila menapis bingkai data mengikut berbilang keadaan?

Susan Sarandon
Susan Sarandonasal
2024-10-26 08:57:30786semak imbas

Why does the AND operator (&) in pandas behave like the OR operator (|) when filtering data frames by multiple conditions?

pandas: Menapis Bingkai Data dengan Berbilang Syarat

Dalam panda, menapis bingkai data mengikut nilai dalam berbilang lajur boleh menjadi rumit. Apabila menggunakan operator AND (&), anda mungkin menjangkakan ia berkelakuan seperti operator OR (|), dan sebaliknya.

Pertimbangkan kod ujian berikut:

<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) &amp; (df.b != -1)]
df2 = df[(df.a != -1) | (df.b != -1)]
print(pd.concat([df, df1, df2], axis=1, keys=[ 'original df', 'using AND (&amp;)', 'using OR (|)',]))</code>

Yang tidak dijangka tingkah laku berlaku dalam keputusan:

      original df      using AND (&amp;)      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]

Operator AND (&) menjatuhkan setiap baris dengan sekurang-kurangnya satu nilai ialah -1, manakala operator OR (|) hanya menjatuhkan baris dengan kedua-dua nilai ialah -1. Tingkah laku ini adalah bertentangan dengan apa yang dijangkakan.

Sebab tingkah laku ini terletak pada cara pengendali ini digunakan. Dalam keadaan AND, anda menentukan untuk mengekalkan baris di mana kedua-dua syarat adalah benar, yang bersamaan dengan menjatuhkan baris dengan sekurang-kurangnya satu syarat adalah palsu. Sebaliknya, syarat OR menentukan untuk mengekalkan baris di mana mana-mana syarat adalah benar, yang bersamaan dengan menjatuhkan baris apabila kedua-dua syarat adalah palsu.

Untuk memastikan kejelasan dan mengelakkan kekeliruan, adalah disyorkan untuk menggunakan tatatanda eksplisit untuk keadaan melibatkan berbilang lajur. Daripada merantai berbilang syarat dengan pengendali, gunakan kurungan untuk menghimpunkan keadaan dan jadikan perhubungan logiknya jelas.

Sebagai contoh, kod berikut secara eksplisit menyatakan syarat DAN:

<code class="python">df1 = df[(df.a != -1) & (df.b != -1)]</code>

Sementara yang berikut kod secara eksplisit menyatakan syarat ATAU:

<code class="python">df2 = df[(df.a != -1) | (df.b != -1)]</code>

Dengan menggunakan tatatanda eksplisit, anda boleh memastikan syarat anda ditafsirkan seperti yang dimaksudkan dan mencegah kelakuan yang tidak dijangka.

Atas ialah kandungan terperinci Mengapakah operator AND (&) dalam panda berkelakuan seperti operator OR (|) apabila menapis bingkai data mengikut berbilang keadaan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn