Mengapakah menggunakan operator OR dalam pengindeksan panda mengekalkan baris dengan nilai -1, manakala operator AND membuangnya, bercanggah dengan jangkaan intuitif?

Susan Sarandon
Lepaskan: 2024-10-26 05:47:31
asal
974 orang telah melayarinya

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

panda: Pelbagai Keadaan Semasa Mengindeks Bingkai Data - Gelagat Tidak Intuitif

Apabila memilih baris daripada bingkai data berdasarkan syarat yang melibatkan berbilang lajur, pengguna mungkin menghadapi tingkah laku yang tidak dijangka. Khususnya, pengendali OR dan AND nampaknya berkelakuan bertentangan dengan peranan yang dijangkakan.

Pertimbangkan kod berikut:

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

Keputusan:

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

Seperti yang diperhatikan , baris dengan satu atau kedua-dua nilai ialah -1 dikekalkan apabila operator OR digunakan (df2), manakala baris dengan sebarang nilai -1 dibuang apabila operator AND digunakan (df1). Tingkah laku ini bercanggah dengan jangkaan intuitif.

Penjelasan

Tingkah laku yang seolah-olah terbalik berpunca daripada perspektif yang diterima pakai dalam keadaan setiap pengendali. Untuk operator DAN:

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

Syarat berbunyi sebagai "kekalkan baris di mana kedua-dua df.a dan df.b berbeza daripada -1", secara berkesan mengecualikan baris dengan sekurang-kurangnya satu nilai -1.

Sebaliknya, pengendali OR:

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

Dibaca sebagai "kekalkan baris di mana sama ada df.a atau df.b berbeza daripada -1," secara berkesan mengecualikan baris dengan kedua-dua nilai ialah -1.

Oleh itu, tingkah laku sejajar dengan niat untuk memilih baris untuk dikekalkan, bukannya baris untuk dikecualikan.

Nota tentang Akses Berantai

Coretan kod df ['a'][1] = -1 untuk mengubah suai nilai sel tidak digalakkan. Untuk kejelasan dan ketekalan, adalah disyorkan untuk menggunakan df.loc[1, 'a'] = -1 atau df.iloc[1, 0] = -1 sebaliknya.

Atas ialah kandungan terperinci Mengapakah menggunakan operator OR dalam pengindeksan panda mengekalkan baris dengan nilai -1, manakala operator AND membuangnya, bercanggah dengan jangkaan intuitif?. 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