pandas проблема создания регулярного выражения для str.contains "|" «яблоко [красный]», «яблоко [зеленый]» - PullRequest
0 голосов
/ 10 марта 2020

Давайте предположим, что мой фрейм данных

    Name    Value
0   K       apple
1   Y       banana
2   B       orange
3   Q       grape
4   C       apple
5   A       apple

и мой код

mylist = ['apple']
df1 = df['Value'].str.contains("|".join(mylist))

df['Label'] = df1
df = df[df['Label'].astype('str').str.startswith('True')]

выход

    Name    Value
0   K       apple
4   C       apple
5   A       apple

My Вопрос

когда мой фрейм данных, как показано ниже,

    Name    Value
0   K       apple[red]
1   Y       banana[yellow]
2   B       orange[orange]
3   Q       grape[purple]
4   C       apple[red]
5   A       apple[green]

и мой код

mylist = ['apple[red]', 'apple[green]']
df1 = df['Value'].str.contains("|".join(mylist))

df['Label'] = df1
df = df[df['Label'].astype('str').str.startswith('True')]

Когда я запускаю код и вижу результат, он не ничего не узнаю. Результатом является пустое значение.

выведите то, что я хочу

    Name    Value
0   K       apple[red]
4   C       apple[red]
5   A       apple[green]

спасибо за чтение.

1 Ответ

6 голосов
/ 10 марта 2020

Поскольку возможны некоторые специальные regex значения, используйте re.escape:

import re

mylist = ['apple[red]', 'apple[green]']

df1 = df[df['Value'].str.contains("|".join(re.escape(x) for x in mylist))]
print (df1)
  Name         Value
0    K    apple[red]
4    C    apple[red]
5    A  apple[green]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...