["python","python-2.7","pandas"]
Check if a string in a Pandas DataFrame column is in a list of strings

If I have a frame like this frame = pd.DataFrame({ "a": ["the cat is blue", "the sky is green", "the dog is black"] }) and I want to check if any of those rows contain a certain word I just have to do this. frame["b"] = ( frame.a.str.contains("dog") | frame.a.str.contains("cat") | frame.a.str.contains("fish") ) frame["b"] outputs: 0 True 1 False 2 True Name: b, dtype: bool If I decide to make a list: mylist = ["dog", "cat", "fish"] How would I check that the rows contain a certain word in the list?
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 The str.contains method accepts a regular expression pattern: 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 Because regex patterns are supported, you can also embed flags: 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