2013-07-31 10 views
23

Jeśli mam ramkę jak tensprawdzić, czy ciąg w kolumnie dataframe pandy jest na liście

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

i chcę, aby sprawdzić, czy któryś z tych wierszy zawiera pewną słowo po prostu muszę to zrobić.

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

frame['b'] wyjścia:

True 
False 
True 

Jeśli zdecyduję się zrobić listę

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

jaki sposób mogę sprawdzić, że wiersze zawierają pewną słowo na liście?

Odpowiedz

45

Sposób str.contains akceptuje wzorca wyrażenia regularnego:

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

To znacznie przyspiesza, co robię. Czy jest jakiś sposób na przywrócenie wzorca podrzędnego (na przykład * pies *) zamiast True False? – zelusp

+1

Wyobraźmy sobie: aby zwrócić dopasowany wzorzec, użyj 'frame.a.str.extract (pattern)' – zelusp