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?
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
Pour la liste devrait fonctionner
print frame[frame['a'].isin(mylist)]
http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.isin.html