Почему метод Pandas series.str.contains не обнаруживает совпадение, когда есть начальный пробел? - PullRequest
3 голосов
/ 02 августа 2020

Я хочу найти все значения индекса, содержащие строку ' (target)'.

Пример:

index = pd.Index(['TIC7201-PV (target)', 'TIC7202-PV', 'TIC7203-PV'])
print(index.str.contains(' (target)'))

Что я получаю:

[False False False]

What I ожидается:

[ True False False]

Для сравнения:

print(index.str.contains('(target)'))
print(index.str.endswith(' (target)'))

дает:

[ True False False]
[ True False False]

Ответы [ 2 ]

3 голосов
/ 02 августа 2020

Оказывается, значение по умолчанию для аргумента regex - True.

  • С регулярным выражением (...) означает захват всего внутри, поэтому он пытается найти ' target' вместо ' (target)'
  • Возможные варианты решения проблемы:
    • Установить regex=False
    • Закройте круглые скобки с помощью \(...\)

Следовательно, чтобы получить желаемое поведение, у меня есть два варианта:

# 1
index.str.contains(' (target)',regex=False)

# 2
index.str.contains(r' \(target\)')
2 голосов
/ 02 августа 2020

Pass regex False, () здесь стиль регулярного выражения

index.str.contains(' (target)',regex=False)
Out[103]: array([ True, False, False])
...