How to delete all columns in DataFrame except certain ones?

PythonPandasDataframe

Python Problem Overview


Let's say I have a DataFrame that looks like this:

a  b  c  d  e  f  g  
1  2  3  4  5  6  7
4  3  7  1  6  9  4
8  9  0  2  4  2  1

How would I go about deleting every column besides a and b?

This would result in:

a  b
1  2
4  3
8  9

I would like a way to delete these using a simple line of code that says, delete all columns besides a and b, because let's say hypothetically I have 1000 columns of data.

Thank you.

Python Solutions


Solution 1 - Python

In [48]: df.drop(df.columns.difference(['a','b']), 1, inplace=True)
Out[48]:
   a  b
0  1  2
1  4  3
2  8  9

or:

In [55]: df = df.loc[:, df.columns.intersection(['a','b'])]

In [56]: df
Out[56]:
   a  b
0  1  2
1  4  3
2  8  9

PS please be aware that the most idiomatic Pandas way to do that was already proposed by @Wen:

df = df[['a','b']]

or

df = df.loc[:, ['a','b']]

Solution 2 - Python

Another option to add to the mix. I prefer this approach for readability.

df = df.filter(['a', 'b'])

Where the first positional argument is items=[]


Bonus

You can also use a like argument or regex to filter.
Helpful if you have a set of columns like ['a_1','a_2','b_1','b_2']

You can do

df = df.filter(like='b_')

and end up with ['b_1','b_2']

Pandas documentation for filter.

Solution 3 - Python

there are multiple solution .

df = df[['a','b']] #1

df = df[list('ab')] #2

df = df.loc[:,df.columns.isin(['a','b'])] #3

df = pd.DataFrame(data=df.eval('a,b').T,columns=['a','b']) #4 PS:I do not recommend this method , but still a way to achieve this 

Solution 4 - Python

If you only want to keep more columns than you're dropping put a "~" before the .isin statement to select every column except the ones you want:

df = df.loc[:, ~df.columns.isin(['a','b'])]

Solution 5 - Python

If you have more than two columns that you want to drop, let's say 20 or 30, you can use lists as well. Make sure that you also specify the axis value.

drop_list = ["a","b"]
df = df.drop(df.columns.difference(drop_list), axis=1)

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionsgerbhctimView Question on Stackoverflow
Solution 1 - PythonMaxU - stop genocide of UAView Answer on Stackoverflow
Solution 2 - PythonGollyJerView Answer on Stackoverflow
Solution 3 - PythonBENYView Answer on Stackoverflow
Solution 4 - PythonIsaac TaylorView Answer on Stackoverflow
Solution 5 - PythonTaieView Answer on Stackoverflow