У меня есть DataFrame Pandas со столбцом, содержащим разные строки. Я пытаюсь найти все строки, в которых появляется определенная строка «HELLO + WORLD». Однако когда я использую str.contains(), он возвращает True только для первых нескольких строк. Вот мой пример кода:
import pandas as pd
df = pd.DataFrame({
'AREA': ["HELLO / WORLD"] * 3 +["HELLO + WORLD"] * 200
})
print(df['AREA'].str.contains("HELLO + WORLD"))
print(df['AREA'].str.contains("HELLO / WORLD"))
ВЫХОД:
0 False
1 False
2 False
3 False
4 False
...
198 False
199 False
200 False
201 False
202 False
Name: AREA, Length: 203, dtype: bool
0 True
1 True
2 True
3 False
4 False
...
198 False
199 False
200 False
201 False
202 False
Name: AREA, Length: 203, dtype: bool
Я ожидал получить True для всех строк, содержащих правильные подстроки, но в большинстве случаев результат оказался False. Может кто-нибудь объяснить, почему это происходит, и предложить решение?
По умолчанию pandas.Series.str.contains принимает шаблон регулярного выражения, а не буквальную строку.
Итак, "HELLO + WORLD"
попытается сопоставить строку "HELLO"
, за которой следует один или несколько пробелов (" +"
), за которыми следует " WORLD"
.
Чтобы получить ожидаемый результат, вам нужно либо использовать шаблон регулярного выражения, который экранирует +
с помощью \
, чтобы он интерпретировался как символ плюса, либо установить regex=False
:
df['AREA'].str.contains("HELLO \+ WORLD")
# or
df['AREA'].str.contains("HELLO + WORLD", regex=False)
Оба выведут:
0 False
1 False
2 False
3 True
4 True
...
198 True
199 True
200 True
201 True
202 True
Name: AREA, Length: 203, dtype: bool