2015-02-23 22 views
31

Tôi có một khung dữ liệu rất lớn trong python và tôi muốn thả tất cả các hàng có một chuỗi cụ thể bên trong một cột cụ thể.Làm thế nào để thả các hàng từ khung dữ liệu gấu trúc có chứa một chuỗi cụ thể trong một cột cụ thể?

Ví dụ: tôi muốn thả tất cả các hàng có chuỗi "XYZ" làm chuỗi con trong cột C của khung dữ liệu.

Điều này có thể được triển khai theo cách hiệu quả bằng phương thức .drop() không?

Trả lời

50

gấu trúc đã vector hóa chuỗi hoạt động, vì vậy bạn chỉ có thể lọc ra các hàng có chứa chuỗi bạn không muốn:

In [91]: df = pd.DataFrame(dict(A=[5,3,5,6], C=["foo","bar","fooXYZbar", "bat"])) 

In [92]: df 
Out[92]: 
    A   C 
0 5  foo 
1 3  bar 
2 5 fooXYZbar 
3 6  bat 

In [93]: df[df.C.str.contains("XYZ") == False] 
Out[93]: 
    A C 
0 5 foo 
1 3 bar 
3 6 bat 
+18

Mặc dù những gì bạn đã viết là chính xác và dễ đọc hơn, một phương pháp ngắn hơn sẽ là: 'df [~ df.C.str.contains ("XYZ") ] ' – EdChum

15

Nếu chuỗi khó khăn của bạn không chỉ là một chuỗi bạn có thể thả những hàng tương ứng với:

df = df[~df['your column'].isin(['list of strings'])] 

trên sẽ thả tất cả các hàng có chứa các yếu tố của danh sách

+0

Bạn sẽ làm ngược lại điều này như thế nào? Tôi muốn kiểm tra xem giá trị cột có chứa bất kỳ chuỗi nào không. pseudo: 'cho chuỗi trong list_of_strings, kiểm tra xem cột có chứa nó' – radtek

+1

Chỉ cần xóa "~" df = df [df ['cột của bạn'] .inin (['danh sách chuỗi'])] – ksooklall

+0

Đã nhận được điều đó , nhưng cảm ơn – radtek

5

của bạn này sẽ chỉ làm việc nếu bạn muốn so sánh chuỗi chính xác. Nó sẽ không hoạt động trong trường hợp bạn muốn kiểm tra xem chuỗi cột có chứa bất kỳ chuỗi nào trong danh sách hay không. Cách đúng để so sánh với một danh sách sẽ là:

searchfor = ['john', 'doe'] 
    df = df[~df.col.str.contains('|'.join(searchfor))] 
Các vấn đề liên quan