Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Menggunakan Operator AND (`&`) dan OR (`|`) dalam Operasi Penapisan Pandas Menghasilkan Keputusan Yang Tidak Dijangka?

Mengapa Menggunakan Operator AND (`&`) dan OR (`|`) dalam Operasi Penapisan Pandas Menghasilkan Keputusan Yang Tidak Dijangka?

Susan Sarandon
Susan Sarandonasal
2024-10-25 06:55:28629semak imbas

Why Does Using AND (`&`) and OR (`|`) Operators in Pandas Filtering Operations Produce Unexpected Results?

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

Dalam analisis data, panda ialah perpustakaan penting untuk memanipulasi dan memproses bingkai data. Semasa menjalankan operasi penapisan, adalah penting untuk memahami gelagat pengendali apabila menggunakan berbilang syarat.

Mari kita pertimbangkan senario di mana kita ingin menapis baris dalam bingkai data berdasarkan nilai dalam dua lajur, 'a' dan ' b'. Menggunakan operator AND '&' dan OR '|' pengendali, kami menjangkakan DAN akan menggugurkan baris dengan sekurang-kurangnya satu nilai bersamaan dengan -1 manakala OR harus mengekalkan baris dengan kedua-dua nilai ialah -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>

Tanpa diduga, operator AND menjatuhkan setiap baris dengan sekurang-kurangnya satu nilai ialah -1, manakala pengendali OR memerlukan kedua-dua nilai menjadi -1 untuk menggugurkannya.

Kunci untuk memahami tingkah laku ini terletak pada mengingati bahawa kita menulis syarat dari segi perkara yang ingin kita simpan, bukan apa yang kita mahu jatuhkan.

  • Untuk df1: (df.a != -1) & (df.b != -1) bermaksud "kekalkan baris di mana df.a tidak - 1 dan df.b bukan -1", yang bersamaan dengan menjatuhkan baris dengan sekurang-kurangnya satu nilai ialah -1.
  • Untuk df2: (df.a != -1) | (df.b != -1) bermaksud "kekalkan baris di mana sama ada df.a atau df.b bukan -1", yang bersamaan dengan menjatuhkan baris dengan kedua-dua nilai ialah -1.

Adalah penting untuk menggunakan akses berantai seperti df.loc dan df.iloc dan bukannya df['a'][1] = -1 untuk mengelakkan isu yang berpotensi.

Atas ialah kandungan terperinci Mengapa Menggunakan Operator AND (`&`) dan OR (`|`) dalam Operasi Penapisan Pandas Menghasilkan Keputusan Yang 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