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) & (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>
Yang tidak dijangka tingkah laku berlaku dalam keputusan:
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]
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!