web-dev-qa-db-fra.com

vérifier si la chaîne dans pandas dataframe est dans la liste

Si j'ai un cadre comme celui-ci

frame = pd.DataFrame({'a' : ['the cat is blue', 'the sky is green', 'the dog is black']})

et je veux vérifier si l'une de ces lignes contient un certain mot, je dois juste le faire.

frame['b'] = frame.a.str.contains("dog") | frame.a.str.contains("cat") | frame.a.str.contains("fish")

frame['b'] les sorties:

True
False
True

Si je décide de faire une liste

mylist =['dog', 'cat', 'fish']

comment pourrais-je vérifier que les lignes contiennent un certain mot dans la liste?

36
user2333196
frame = pd.DataFrame({'a' : ['the cat is blue', 'the sky is green', 'the dog is black']})

frame
                  a
0   the cat is blue
1  the sky is green
2  the dog is black

Le str.contains La méthode accepte un modèle d'expression régulière:

mylist = ['dog', 'cat', 'fish']
pattern = '|'.join(mylist)

pattern
'dog|cat|fish'

frame.a.str.contains(pattern)
0     True
1    False
2     True
Name: a, dtype: bool

Étant donné que les modèles d'expression régulière sont pris en charge, vous pouvez également incorporer des indicateurs:

frame = pd.DataFrame({'a' : ['Cat Mr. Nibbles is blue', 'the sky is green', 'the dog is black']})

frame
                     a
0  Cat Mr. Nibbles is blue
1         the sky is green
2         the dog is black

pattern = '|'.join([f'(?i){animal}' for animal in mylist])  # python 3.6+

pattern
'(?i)dog|(?i)cat|(?i)fish'

frame.a.str.contains(pattern)
0     True  # Because of the (?i) flag, 'Cat' is also matched to 'cat'
1    False
2     True
68
Andy Hayden

Pour la liste devrait fonctionner

print frame[frame['a'].isin(mylist)]     

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.isin.html

6
Meloun