Использование str.contains в pandas dataframe

Этот код pandas python генерирует сообщение об ошибке,

"TypeError: неправильный тип операнда для унарного ~: 'float'"

Я не знаю, почему, потому что я пытаюсь манипулировать объектом str

df_Anomalous_Vendor_Reasons[~df_Anomalous_Vendor_Reasons['V'].str.contains("File*|registry*")] #sorts, leaving only cases where reason is NOT File or Registry

У кого-нибудь есть идеи?

Ответ 1

Отметьте комментарий Davtho1983 выше, я думал, что добавлю цвет в комментарий для ясности.

Для тех, кто споткнулся об этом позже с той же ошибкой (как и я). Это очень простое решение. Документация из панд показывает

Series.str.contains(pat, case=True, flags=0, na=nan, regex=True)

Что происходит, метод contains() не применяется к значениям na в DataFrame, они останутся na. Вам просто нужно заполнить значения na булевыми значениями, чтобы вы могли использовать инвертирующий оператор ~.

В приведенном выше примере следует использовать

df_Anomalous_Vendor_Reasons[~df_Anomalous_Vendor_Reasons['V'].str.contains("File*|registry*", na=False)]

Разумеется, нужно выбрать False или True для аргумента na на основе предполагаемой логики. Любое булево значение, которое вы выберете для заполнения na, будет инвертировано.