2013-10-03 40 views
17

Tôi tự hỏi liệu có cách nào hiệu quả hơn để sử dụng hàm str.contains() trong Pandas, để tìm kiếm hai chuỗi một phần cùng một lúc hay không. Tôi muốn tìm kiếm một cột nhất định trong một khung dữ liệu cho dữ liệu có chứa "nt" hoặc "nv". Ngay bây giờ, mã của tôi trông giống như sau:Sử dụng str.contains() trong gấu trúc với khung dữ liệu

df[df['Behavior'].str.contains("nt", na=False)] 
    df[df['Behavior'].str.contains("nv", na=False)] 

Và sau đó tôi nối kết quả này với kết quả khác. Điều tôi muốn làm là sử dụng một dòng mã để tìm kiếm bất kỳ dữ liệu nào bao gồm "nt" HOẶC "nv" HOẶC "nf". Tôi đã chơi xung quanh với một số cách mà tôi nghĩ rằng nên làm việc, bao gồm cả chỉ gắn một đường ống giữa các điều khoản, nhưng tất cả những kết quả trong các lỗi. Tôi đã kiểm tra tài liệu, nhưng tôi không thấy điều này như một tùy chọn. Tôi gặp lỗi như sau:

--------------------------------------------------------------------------- 
    TypeError         Traceback (most recent call last) 
    <ipython-input-113-1d11e906812c> in <module>() 
    3 
    4 
    ----> 5 soctol = f_recs[f_recs['Behavior'].str.contains("nt"|"nv", na=False)] 
    6 soctol 

    TypeError: unsupported operand type(s) for |: 'str' and 'str' 

Có cách nào nhanh chóng để thực hiện việc này không? Cảm ơn bạn đã giúp đỡ bất kỳ, tôi là một người mới bắt đầu nhưng là LOVING gấu trúc cho dữ liệu wrangling.

Trả lời

32

là một biểu hiện thường xuyên và phải ở trong một chuỗi:

"nt|nv" # rather than "nt" | " nv" 
f_recs[f_recs['Behavior'].str.contains("nt|nv", na=False)] 

Python không cho phép bạn sử dụng hoặc (|) điều hành trên dây:

In [1]: "nt" | "nv" 
TypeError: unsupported operand type(s) for |: 'str' and 'str' 
+2

nhờ một vẻ đẹp như vậy! . thận trọng mặc dù, không có không gian giữa đường ống và các cụm từ tìm kiếm! – jaknap32

+3

@ jaknap32: Nếu bạn sử dụng công cụ sửa đổi '(? X)', bạn có thể thêm dấu cách vào bất cứ nơi nào bạn muốn - '" (? X) nt | nv "' - (nhưng nếu bạn có dấu cách có ý nghĩa trong mẫu, bạn sẽ cần phải thoát chúng, cũng như '#' char). Xem [Tài liệu Python 're.X'] (https://docs.python.org/2/library/re.html#re.VERBOSE). Dù sao, 'n [tv]' là một regex tốt hơn so với 'nt | nv'. –

+0

+1 cho biểu thức "na = False". Dữ liệu của tôi có những khoảng trống trong đó và hàm chứa chuỗi của tôi sẽ không hoạt động nếu không có nó. –

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