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.
6 Answers
use drop method:
df.drop(column_name, axis=1)
7 Comments
uniquegino
what does axis = 1 mean here?
Brian
@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 spaceHim
I've always used this to permanently drop a column. Never thought to use it for selection.
scott.mind == "blown"Philippe Remy
Do not forget to add
inplace=True or to assign it to a variable.Revolucion for Monica
@Scott Does it permanently remove a column ? Or if I print dp` again I would have it again ?
|
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
Yu Shen
Note: the question is for "all but one" columns not for selecting one column.
EdChum
@YuShen my answer shows how to select an arbritrary list of columns, it is not showing how to select a single column.
Eric Walker
@EdChum people seem to have been precipitate in downvoting this one.
EdChum
@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).df[ df.columns[df.columns!='not_this_column'] ]
1 Comment
qwr
This syntax requires writing
df 3 times and .columns twiceJust 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
Little Bobby Tables
Don't do that. Do this
df.loc[:, ~df.columns.isin(["col1", "col2"])]. Even then, just use drop with the list ["col1", "col2"].qwr
List comprehension is not an efficient way to do this.