2013-07-30 39 views
21

này hoạt động (sử dụng Pandas 12 dev)gấu trúc lựa chọn tuyệt vời Dataframe sử dụng startswith

table2=table[table['SUBDIVISION'] =='INVERNESS'] 

Sau đó, tôi nhận ra tôi cần phải chọn lĩnh vực này sử dụng "bắt đầu với" Kể từ khi tôi đã mất tích một bó. Vì vậy, theo các Pandas doc như gần như tôi có thể làm theo tôi đã cố gắng

criteria = table['SUBDIVISION'].map(lambda x: x.startswith('INVERNESS')) 
table2 = table[criteria] 

Và có AttributeError: 'phao' đối tượng không có thuộc tính 'startswith'

Vì vậy, tôi đã cố gắng một cú pháp thay thế với cùng kết quả

table[[x.startswith('INVERNESS') for x in table['SUBDIVISION']]] 

Reference http://pandas.pydata.org/pandas-docs/stable/indexing.html#boolean-indexing Phần 4: Danh sách comprehensions và phương pháp bản đồ của Dòng cũng có thể được sử dụng để sản xuất các tiêu chí phức tạp hơn:

Tôi đang thiếu gì?

+0

Có thể bạn đưa ra một ví dụ nhỏ thể hiện điều này, tôi ngạc nhiên rằng việc hiểu danh sách sẽ không tăng theo cùng cách với bản đồ ... –

Trả lời

33

Bạn có thể sử dụng phương pháp str.startswith DataFrame để cho kết quả ổn định hơn:

In [11]: s = pd.Series(['a', 'ab', 'c', 11, np.nan]) 

In [12]: s 
Out[12]: 
0  a 
1  ab 
2  c 
3  11 
4 NaN 
dtype: object 

In [13]: s.str.startswith('a', na=False) 
Out[13]: 
0  True 
1  True 
2 False 
3 False 
4 False 
dtype: bool 

và việc lập chỉ mục boolean sẽ chỉ làm việc tốt (Tôi thích sử dụng loc, nhưng nó hoạt động giống như nhau không có):

In [14]: s.loc[s.str.startswith('a', na=False)] 
Out[14]: 
0  a 
1 ab 
dtype: object 

.

Có vẻ ít nhất một trong các yếu tố của bạn trong Series/cột là một phao, mà không có một phương pháp startswith do đó AttributeError, danh sách hiểu biết nên nâng những lỗi tương tự ...

+0

Cảm ơn bạn đã trả lời ... Dường như không đến đó 'SUBDIVISION'] str.startswith ('INVERNESS', na = False) và có bảng ['SUBDIVISION'] str.startswith ('INVERNESS', na = False) ^ Cú phápError: cú pháp không hợp lệ Tự hỏi nếu tôi không nhập gì đó Cần thiết? Tôi không nhận được nó kể từ khi điều kiện == thẳng của tôi hoạt động tốt – dartdog

+1

Và nếu tôi thử table.loc [table ['SUBDIVISION']. Str.startswith ('INVERNESS', na = False)] Tôi nhận được kết quả tốt !! Nhưng tôi vẫn không nhận được những gì là sai với những nỗ lực trước? – dartdog

+0

@dartdog bạn đã bỏ lỡ một dấu chấm. xin vui lòng bao gồm một tập hợp con nhỏ của dữ liệu mà chứng minh vấn đề (có vẻ khó tin: s) –

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