Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah menggunakan operator OR dalam pengindeksan panda mengekalkan baris dengan nilai -1, manakala operator AND membuangnya, bercanggah dengan jangkaan intuitif?

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

Susan Sarandon
Susan Sarandonasal
2024-10-26 05:47:31892semak imbas

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>

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>

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>

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>

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!

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