После комментария Стеф Я полностью изменил свой ответ:
Если у вас ваш столбец в виде строка 'True' или 'Ложь' , смешанные со значениями NaN , вы можете использовать заменить словарем:
- заменить строку 'True' с логическим True ,
- заменить строку 'False' с логическим False .
Что-то вроде:
ri_df.contraband_weapon.replace({'True': True, 'False': False}, inplace=True)
Так что код может быть довольно коротким.
Но плохая новость заключается в том, что тип этого столбца все еще объект .Причина в том, что:
- большинство значений имеют тип bool ,
- , но некоторые из них NaN , что на самом делеособый случай float .
Следовательно, среди значений в этом столбце нет никакого «одиночного» типа, поэтому тип не может быть bool .
Редактировать после вопроса об "обходном пути"
Я вижу, что вы хотите сохранить "логику трех значений" ( True / False / Неизвестно ).
Если вы хотите остаться с родными Pandas типами данных, я думаю, что нет никакого обходного пути, потому что:
- bool имеет значение True или False (не третий вариант, как «неизвестный»),
- NaN является специальнымcase float ,
, поэтому вам придется жить с этой "смесью типов".
Возможно, какой-то альтернативой является определение Категориального *Тип 1093 *, включая три категории, соответствующие True , False и Unknown и перевод каждого значения источника в соответствующую категорию.
Затем будет single тип данных, но недостатком является то, что если вы хотите иметь какие-либо «3-значные операторы / функции bool», вы должны программировать их самостоятельно.