102

Is there a way to select all but one column in a pandas DataFrame object? I've seen ways to delete a column, but I don't want to do that.

ayhan
  • 64,199
  • 17
  • 170
  • 189
user1802143
  • 13,472
  • 16
  • 43
  • 53

6 Answers6

146

use drop method:

df.drop(column_name, axis=1)
HYRY
  • 89,863
  • 23
  • 181
  • 185
82
df.loc[:, df.columns != col]

where col is the name of the column to leave out.

lev
  • 2,507
  • 21
  • 21
18

you can just select the columns you want without deleting or dropping:

collist = ['col1', 'col2', 'col3']
df1 = df[collist]

Just pass a list of the columns you desire

You can also retrieve the list of columns and then select from that list

collist = df.columns.tolist()
# you can now select from this list any arbritrary range
df1 = df[collist[0:1]]
# or remove a column
collist.remove('col2')
# now select
df1 = df[collist]
# df1 will now only have 'col1' and 'col3'
EdChum
  • 339,461
  • 188
  • 752
  • 538
  • 5
    Note: the question is for "all but one" columns not for selecting one column. – Yu Shen Jan 16 '14 at 10:12
  • @YuShen my answer shows how to select an arbritrary list of columns, it is not showing how to select a single column. – EdChum Jan 16 '14 at 10:21
  • @EdChum people seem to have been precipitate in downvoting this one. – Eric Walker Aug 21 '14 at 21:01
  • @EricWalker it's only rep nothing major plus I know this is an answer that is correct, others are free to think different but it doesn't make me think I should delete or edit this answer. In fact dropping a column would delete the column if you assigned the result of drop to itself e.g. `df = df.drop(col, axis=1)`. – EdChum Aug 21 '14 at 21:08
3
df[ df.columns[df.columns!='not_this_column'] ]
pgalilea
  • 241
  • 2
  • 5
2

You could use numpy to build a mask:

import numpy as np
columns = df.columns
mask = np.ones(columns.shape, dtype=bool)
i = 4 #The specified column that you don't want to show
mask[i] = 0
df[columns[mask]]
efajardo
  • 727
  • 4
  • 9
2

Just as an option, you can select all columns but one (or many) using a list comprehension and df.loc method:

select = [x for x in df.columns if x != "column_you_don't_want"]
df.loc[:, select]

In case you want to leave out more than one column you can try this:

columns_dont_want = ["col1", "col2"]
select = [x for x in df.columns if x not in columns_dont_want]
df.loc[:, select]
Ivan Calderon
  • 550
  • 6
  • 13