Saya memiliki Series
objek panda yang berisi nilai boolean. Bagaimana saya bisa mendapatkan seri yang berisi logika NOT
dari setiap nilai?
Misalnya, pertimbangkan seri yang berisi:
True
True
True
False
Seri yang ingin saya dapatkan akan berisi:
False
False
False
True
Sepertinya ini seharusnya cukup sederhana, tetapi ternyata saya salah meletakkan mojo = (
object
tipe untuk jawaban di bawah ini berfungsi, jadi gunakan:~ df.astype('bool')
Jawaban:
Untuk membalikkan Seri boolean, gunakan
~s
:Menggunakan Python2.7, NumPy 1.8.0, Pandas 0.13.1:
Pada Pandas 0.13.0, Seri tidak lagi subclass dari
numpy.ndarray
; mereka sekarang adalah subclass daripd.NDFrame
. Ini mungkin ada hubungannya dengan mengapanp.invert(s)
tidak lagi secepat~s
atau-s
.Peringatan:
timeit
hasil dapat bervariasi tergantung pada banyak faktor termasuk perangkat keras, kompiler, OS, Python, NumPy dan versi Pandas.sumber
-
?tilde
seperti yang disebutkan dalam dokumentasi, tetapi tidak melakukan hal yang sama sepertinp.invert
: Snp.invert(s)
,~s
dan-s
semuanya sama.np.bitwise_not(s)
melakukan hal yang sama sepertinp.inverse
).@ unutbu jawaban tepat, hanya ingin menambahkan peringatan bahwa topeng Anda harus dtype bool, bukan 'objek'. Yaitu masker Anda tidak dapat memiliki pernah punya nan ini. Lihat di sini - bahkan jika topeng Anda bebas nan sekarang, itu akan tetap menjadi tipe 'objek'.
Kebalikan dari seri 'objek' tidak akan menimbulkan kesalahan, sebaliknya Anda akan mendapatkan topeng sampah int yang tidak akan berfungsi seperti yang Anda harapkan.
Setelah berbicara dengan rekan tentang hal ini, saya memiliki penjelasan: Sepertinya panda kembali ke operator bitwise:
Seperti kata @geher, Anda dapat mengubahnya menjadi bool dengan astype sebelum Anda kebalikan dengan ~
sumber
.astype(bool)
eg~df['A'].astype(bool)
astype(bool)
terjadi sebelum~
~df['A'].astype(bool)
vs(~df['A']).astype(bool)
Saya hanya mencobanya:
sumber
-
! Saya akan mengingat hal ini untuk waktu berikutnya.Anda juga dapat menggunakan
numpy.invert
:EDIT: Perbedaan kinerja muncul di Ubuntu 12.04, Python 2.7, NumPy 1.7.0 - tampaknya tidak ada menggunakan NumPy 1.6.2:
sumber
NumPy lebih lambat karena ia memasukkan input ke nilai boolean (jadi None dan 0 menjadi False dan yang lainnya menjadi True).
Memberi anda
sedangkan ~ s akan crash. Dalam kebanyakan kasus, tilde akan menjadi pilihan yang lebih aman daripada NumPy.
Panda 0,25, Jumlah 1,17
sumber