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

Susan Sarandon
Lepaskan: 2024-10-26 08:57:30
asal
785 orang telah melayarinya

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>
Salin selepas log masuk

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]
Salin selepas log masuk

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>
Salin selepas log masuk

Sementara yang berikut kod secara eksplisit menyatakan syarat ATAU:

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

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan