Pour inverser une série booléenne, utilisez~s
:
In [7]: s = pd.Series([True, True, False, True])
In [8]: ~s
Out[8]:
0 False
1 False
2 True
3 False
dtype: bool
En utilisant Python2.7, NumPy 1.8.0, Pandas 0.13.1:
In [119]: s = pd.Series([True, True, False, True]*10000)
In [10]: %timeit np.invert(s)
10000 loops, best of 3: 91.8 µs per loop
In [11]: %timeit ~s
10000 loops, best of 3: 73.5 µs per loop
In [12]: %timeit (-s)
10000 loops, best of 3: 73.5 µs per loop
Depuis Pandas 0.13.0, les séries ne sont plus des sous-classes de numpy.ndarray
; ce sont maintenant des sous-classes de pd.NDFrame
. Cela pourrait avoir quelque chose à voir avec pourquoi np.invert(s)
n'est plus aussi rapide que ~s
ou -s
.
Avertissement: les timeit
résultats peuvent varier en fonction de nombreux facteurs, notamment le matériel, le compilateur, le système d'exploitation, les versions Python, NumPy et Pandas.
object
types pour que les réponses ci-dessous fonctionnent, alors utilisez:~ df.astype('bool')