Причина этой ошибки в том, что выражения if-else
в python предназначены для сравнения скалярных логических значений. Вы прошли серию.
См. Больше в разделе документов на Pandas Gotchas .
pandas следует соглашению NumPy о возникновении ошибки при попытке
преобразовать что-то в bool
. Это происходит в операторе if или
при использовании логических операций: and
, or
и not
.
В этом примере вы можете объединить их в один шаблон регулярных выражений 'string2?'
, который указывает, что '2'
является необязательным.
def make_request():
...
for mask in new_df.col1.str.contains(r'string2?'):
if mask:
make_request()
Если ваша функция make_request
что-то возвращает, вы можете вызвать ее в списке comp и присвоить обратно:
df['response'] = [
make_request() if m else np.nan for m in new_df.col1.str.contains(r'string2?')]
Другой вариант - использовать регулярное выражение ИЛИ pipe для объединения строк в списке.
import re
words = ['string', 'string2']
for mask in new_df.col1.str.contains('|'.join(map(re.escape, words))):
...