Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Pengindeksan Panda dengan Pelbagai Keadaan Menunjukkan Gelagat Tidak Dijangka?

Mengapa Pengindeksan Panda dengan Pelbagai Keadaan Menunjukkan Gelagat Tidak Dijangka?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-25 09:47:02156semak imbas

Why Does Pandas Indexing with Multiple Conditions Exhibit Unexpected Behavior?

Pengindeksan Pelbagai Keadaan Panda: Gelagat Tidak Dijangka

Dengan panda, menggunakan penapis pada DataFrame ialah operasi biasa. Walau bagaimanapun, apabila menggunakan berbilang keadaan, terutamanya dengan operator logik seperti AND dan OR, hasil yang tidak dijangka boleh berlaku.

Masalah:

Apabila menapis baris berdasarkan nilai dalam dua lajur , pengendali DAN nampaknya berkelakuan seperti ATAU, dan sebaliknya. Sebagai contoh, kod di bawah hendaklah:

  • Gunakan operator AND untuk mengecualikan baris dengan mana-mana nilai lajur ialah -1.
  • Gunakan operator OR untuk mengecualikan baris di mana kedua-dua nilai lajur berada. -1.
<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>

Penjelasan:

Tingkah laku yang tidak dijangka berpunca daripada cara pengendali logik ditafsirkan dalam konteks pengindeksan panda.

  • DAN Operator:

    • df[(df.a != -1) & (df.b != -1)] bermaksud "kekalkan baris di mana kedua-dua df.a bukan -1 dan df.b bukan -1".
    • Ini menapis baris dengan sekurang-kurangnya satu nilai ialah -1.
  • ATAU Operator:

    • df[(df.a != -1) | (df.b != -1)] bermaksud "kekalkan baris di mana sama ada df.a atau df.b bukan -1".
    • Ini menapis keluar baris dengan kedua-dua nilai ialah -1.

Oleh itu, operator AND berkelakuan seperti OR kerana ia mengecualikan baris berdasarkan ketiadaan -1 dalam mana-mana lajur. Sebaliknya, pengendali OR berkelakuan seperti DAN kerana ia termasuk baris hanya apabila kedua-dua lajur tidak mengandungi -1.

Nota Tambahan:

  • Adalah disyorkan untuk menggunakan .loc dan .iloc bukannya pengindeksan berantai (mis., df'a' = -1) untuk amalan kod yang lebih bersih dan selamat.

Atas ialah kandungan terperinci Mengapa Pengindeksan Panda dengan Pelbagai Keadaan Menunjukkan Gelagat Tidak Dijangka?. 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