2013-07-31 55 views
23

Nếu tôi có một khung như thế nàykiểm tra nếu chuỗi trong cột dataframe gấu trúc có trong danh sách

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

và tôi muốn kiểm tra nếu có của những hàng chứa một từ nhất định tôi chỉ phải làm điều này.

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

frame['b'] kết quả đầu ra:

True 
False 
True 

Nếu tôi quyết định để thực hiện một danh sách

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

thế nào tôi sẽ kiểm tra xem hàng có chứa một từ nào đó trong danh sách?

Trả lời

45

Phương pháp str.contains chấp nhận một mẫu biểu thức chính quy:

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

này giúp tăng tốc cho những gì tôi đang làm. Có cách nào để trả lại mẫu con (ví dụ, * dog *) trùng khớp thay vì True False không? – zelusp

+1

Đã tìm ra: để trả lại mẫu sử dụng phù hợp 'frame.a.str.extract (pattern)' – zelusp

3

Đối với danh sách nên làm việc

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

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

+0

Tác vụ này có hoạt động ngay cả khi bạn đang tìm kiếm chuỗi con có khả năng từ danh sách không? Tức là, nếu bạn muốn khớp bất kỳ chuỗi con nào của cột 'a' với bất kỳ phần tử nào trong danh sách của tôi, điều này có bắt được nó không? – HaPsantran

Các vấn đề liên quan