Відповідь @ unutbu - це місце, просто хотілося додати попередження про те, що ваша маска повинна мати тип bool, а не «об’єкт». Тобто у вашій масці ніколи не було жодної няні. Дивіться тут - навіть якщо ваша маска зараз без нан, вона залишатиметься "об’єктним" типом.
Зворотний ряд "об'єкта" не призведе до помилки, натомість ви отримаєте маску сміття з ints, яка не буде працювати, як ви очікували.
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
Після розмови з колегами з цього приводу у мене є пояснення: схоже, панди повертаються до бітового оператора:
In [1]: ~True
Out[1]: -2
Як говорить @geher, ви можете перетворити його в bool з астипеєм, перш ніж ви обернетесь ~
~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
типів для відповідей нижче, щоб працювати, тому використовуйте:~ df.astype('bool')