118

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.

0

6 Answers 6

161

use drop method:

df.drop(column_name, axis=1)
Sign up to request clarification or add additional context in comments.

7 Comments

what does axis = 1 mean here?
@uniquegino It instructs the function to search the column space when looking for the entity to drop. If axis=0, it will search the row space
I've always used this to permanently drop a column. Never thought to use it for selection. scott.mind == "blown"
Do not forget to add inplace=True or to assign it to a variable.
@Scott Does it permanently remove a column ? Or if I print dp` again I would have it again ?
|
92
df.loc[:, df.columns != col]

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

Comments

22

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'

4 Comments

Note: the question is for "all but one" columns not for selecting one column.
@YuShen my answer shows how to select an arbritrary list of columns, it is not showing how to select a single column.
@EdChum people seem to have been precipitate in downvoting this one.
@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).
3
df[ df.columns[df.columns!='not_this_column'] ]

1 Comment

This syntax requires writing df 3 times and .columns twice
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]]

Comments

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]

2 Comments

Don't do that. Do this df.loc[:, ~df.columns.isin(["col1", "col2"])]. Even then, just use drop with the list ["col1", "col2"].
List comprehension is not an efficient way to do this.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.