2013-07-31 3 views
23

Если у меня есть кадр, как этотпроверить, если строка в столбце панд dataframe находится в списке

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

и я хочу, чтобы проверить, если любой из этих строк содержит определенное слово, я просто должен сделать это.

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

frame['b'] выходы:

True 
False 
True 

Если я решил сделать список

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

как бы я проверить, что строки содержат определенное слово в списке?

ответ

45

str.contains метод принимает шаблон регулярного выражения:

In [11]: pattern = '|'.join(mylist) 

In [12]: pattern 
Out[12]: 'dog|cat|fish' 

In [13]: frame.a.str.contains(pattern) 
Out[13]: 
0  True 
1 False 
2  True 
Name: a, dtype: bool 
+0

Это значительно ускоряет то, что я делаю. Есть ли способ вернуть вспомогательный шаблон (скажем, * собака *) вместо True False? – zelusp

+1

Вычислено: для возврата совпадающего шаблона используйте 'frame.a.str.extract (pattern)' – zelusp

3

Для списка должны работать

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

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

+0

Будет ли это работать, даже если вы ищете потенциальную подстроку из списка? То есть, если вы хотите сопоставить любую подстроку столбца 'a' с любым элементом в списке, это поймает? – HaPsantran