Die Antwort von @ unutbu ist genau richtig. Ich wollte nur eine Warnung hinzufügen, dass Ihre Maske vom Typ bool sein muss, nicht 'Objekt'. Dh deine Maske kann noch nie eine Nans gehabt haben . Sehen Sie hier - auch wenn Ihre Maske jetzt nanofrei ist, bleibt sie vom Typ "Objekt".
Die Umkehrung einer 'Objekt'-Reihe löst keinen Fehler aus. Stattdessen erhalten Sie eine Müllmaske mit Ints, die nicht wie erwartet funktioniert.
In[1]: df = pd.DataFrame({'A':[True, False, np.nan], 'B':[True, False, True]})
In[2]: df.dropna(inplace=True)
In[3]: df['A']
Out[3]:
0 True
1 False
Name: A, dtype object
In[4]: ~df['A']
Out[4]:
0 -2
0 -1
Name: A, dtype object
Nachdem ich mit Kollegen darüber gesprochen habe, habe ich eine Erklärung: Es sieht so aus, als würden Pandas zum bitweisen Operator zurückkehren:
In [1]: ~True
Out[1]: -2
Wie @geher sagt, können Sie es mit Astype in Bool konvertieren, bevor Sie mit ~ invertieren
~df['A'].astype(bool)
0 False
1 True
Name: A, dtype: bool
(~df['A']).astype(bool)
0 True
1 True
Name: A, dtype: bool
object
Typen enthalten , damit die folgenden Antworten funktionieren. Verwenden Sie daher:~ df.astype('bool')