2015-04-21 37 views
50

tôi có một cái nhìn dataframe như thế này:Làm thế nào để chọn tất cả các cột, ngoại trừ một cột trong gấu trúc?

import pandas 
import numpy as np 
df = DataFrame(np.random.rand(4,4), columns = list('abcd')) 
df 
     a   b   c   d 
0 0.418762 0.042369 0.869203 0.972314 
1 0.991058 0.510228 0.594784 0.534366 
2 0.407472 0.259811 0.396664 0.894202 
3 0.726168 0.139531 0.324932 0.906575 

Làm thế nào tôi có thể nhận được tất cả các cột trừ column b?

Trả lời

94

Khi bạn không có một MultiIndex, df.columns chỉ là một mảng của tên cột, do đó bạn có thể làm:

df.loc[:, df.columns != 'b'] 

      a   c   d 
0 0.561196 0.013768 0.772827 
1 0.882641 0.615396 0.075381 
2 0.368824 0.651378 0.397203 
3 0.788730 0.568099 0.869127 
+0

có hoạt động, cảm ơn :) –

+2

Không tệ, nhưng giải pháp @ mike sử dụng 'drop' là IMO tốt hơn. Một chút dễ đọc hơn và xử lý multiindexes – travc

69

Không sử dụng ix. Đó là deprecated. Cách đọc được và thành ngữ nhất để làm điều này là df.drop():

>>> df 

      a   b   c   d 
0 0.175127 0.191051 0.382122 0.869242 
1 0.414376 0.300502 0.554819 0.497524 
2 0.142878 0.406830 0.314240 0.093132 
3 0.337368 0.851783 0.933441 0.949598 

>>> df.drop('b', axis=1) 

      a   c   d 
0 0.175127 0.382122 0.869242 
1 0.414376 0.554819 0.497524 
2 0.142878 0.314240 0.093132 
3 0.337368 0.933441 0.949598 

Lưu ý rằng theo mặc định, .drop() không hoạt động inplace; mặc dù tên đáng ngại, df không bị ảnh hưởng bởi quá trình này. Nếu bạn muốn xóa vĩnh viễn b từ df, hãy df.drop('b', inplace=True).

df.drop() cũng chấp nhận danh sách nhãn, ví dụ: df.drop(['a', 'b'], axis=1) sẽ thả cột ab.

+1

Cũng hoạt động trên một multiindex giống như bạn mong đợi nó. 'df.drop ([('l1name', 'l2name'), 'anotherl1name'], trục = 1)'. Dường như sử dụng danh sách so với tuple để xác định xem bạn có muốn nhiều cột (danh sách) hoặc tham chiếu đến multiindex (tuple) hay không. – travc

4

Đây là một cách khác:

df[[i for i in list(df.columns) if i != '<your column>']] 

Bạn chỉ cần vượt qua tất cả các cột được hiển thị trừ của người bạn không muốn.

21
df[df.columns.difference(['b'])] 

Out: 
      a   c   d 
0 0.427809 0.459807 0.333869 
1 0.678031 0.668346 0.645951 
2 0.996573 0.673730 0.314911 
3 0.786942 0.719665 0.330833 
+1

Câu trả lời hay nhất, tổng quát nhất. – ToniAz

+1

Tôi thích phương pháp này vì nó có thể được sử dụng để bỏ qua nhiều cột. –

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