2015-03-24 40 views
21

Tôi đã tìm kiếm các cách để chọn các cột thông qua tài liệu python và các diễn đàn nhưng mọi ví dụ về lập chỉ mục các cột quá đơn giản.chọn nhiều cột theo nhãn pandas

Giả sử tôi có một 10 x 10 dataframe

df = DataFrame(randn(10, 10), index=range(0,10), columns=['A', 'B', 'C', 'D','E','F','G','H','I','J']) 

Cho đến nay, tất cả các tài liệu cung cấp cho chỉ là một ví dụ đơn giản chỉ mục như

subset = df.loc[:,'A':'C'] 

hoặc

subset = df.loc[:,'C':] 

Nhưng Tôi gặp lỗi khi tôi thử chỉ mục nhiều cột không theo tuần tự, như thế này

subset = df.loc[:,('A':'C', 'E')] 

Làm cách nào để lập chỉ mục trong Pandas nếu tôi muốn chọn cột A đến C, E và G cho tôi? Có vẻ như logic này sẽ không hoạt động

subset = df.loc[:,('A':'C', 'E', 'G':'I')] 

Tôi cảm thấy giải pháp này khá đơn giản, nhưng tôi không thể giải quyết được lỗi này. Cảm ơn!

+1

Bạn sẽ phải xây dựng danh sách tất cả các cột quan tâm và chuyển nó thành 'df [col_list]', vấn đề ở đây là phân tích cú pháp điều này sẽ trở thành vấn đề bởi vì '('A': 'C')' không phải là một tuple hợp lệ anyway – EdChum

+2

Điều này là không thể với chỉ mục bình thường: bạn có thể cho một lát (như ''A': 'C''), hoặc danh sách các nhãn (như '['A', 'B', 'C']'), nhưng không phải là kết hợp cả hai. – joris

Trả lời

23

Bạn có ít nhất một vài tùy chọn tại đây.

phẩm- hoặc Label-Based (sử dụng cú pháp biểu thức chính quy)

df.filter(regex='[A-CEG-I]') 

Location-Based (phụ thuộc vào thứ tự cột)

cols = list(df.loc[:,'A':'C']) + ['E'] + list(df.loc[:,'G':'I']) 

df[cols] 

Kết quả trong cả hai trường hợp:

  A   B   C   E   G   H   I 
0 -0.814688 -1.060864 -0.008088 2.697203 -0.763874 1.793213 -0.019520 
1 0.549824 0.269340 0.405570 -0.406695 -0.536304 -1.231051 0.058018 
2 0.879230 -0.666814 1.305835 0.167621 -1.100355 0.391133 0.317467 
+0

Lưu ý rằng trong giải pháp đầu tiên, bạn có thể chọn thêm các hàng nhất định, sử dụng df [["0, 1"], cols]. Cũng lưu ý rằng "danh sách" hack được sử dụng trong biến cols không hoạt động để thực hiện lựa chọn tương tự cho các hàng thay vì cột. – WindChimes

2

Chỉ cần chọn các cột bạn muốn trực tiếp ....

df[['A','E','I','C']] 
+0

Bạn có thể giải thích điều này nhiều hơn một chút cho OP không? – Daniel

+1

Không hiểu tại sao điều này không được đánh dấu là câu trả lời được chấp nhận. Mọi câu trả lời khác có vẻ phức tạp –

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