Select Multiple Columns in DataFrame Pandas. Slice + Select

Viewed 3343

I have de DataFrame with almost 100 columns

I need to select col2 to col4 and col54. How can I do it? I tried:

df = df.loc[:,'col2':col4'] 

but i can't add col54

3 Answers

You can do this in a couple of different ways:

Using the same format you are currently trying to use, I think doing a join of col54 will be necessary.

df = df.loc[:,'col2':'col4'].join(df.loc[:,'col54'])

.

Another method given that col2 is close to col4 would be to do this

df = df.loc[:,['col2','col3','col4', 'col54']]

or simply

df = df[['col2','col3','col4','col54']]

You can simply do this:

df = df.loc[:,['col2','col4','col54']] 

loc takes the column names as list as well.

Or this:

df[['col2','col4','col54']]

You use a list or a pandas.IndexSlice object

 In [1]: import pandas as pd

 In [2]: df = pd.DataFrame(1,index=[0,1,2],columns=["col1","col2","col3","col4","col5"])

 In [3]: df 

 Out[3]:                                                                                                                    
    col1  col2  col3  col4  col5                                                                                         
 0     1     1     1     1     1                                                                                         
 1     1     1     1     1     1                                                                                         
 2     1     1     1     1     1   

 In [4]: df.loc[:,['col1','col2','col4','col5']]

 Out[4]:                                                                                                                         
    col1  col2  col4  col5                                                                                               
 0     1     1     1     1                                                                                               
 1     1     1     1     1                                                                                               
 2     1     1     1     1 

 In [5]: slicer = pd.IndexSlice  

 In [6]: df.loc[:,slicer["col3":"col5"]]   

 Out[6]:                                                                                                                    
    col3  col4  col5                                                                                                     
 0     1     1     1                                                                                                     
 1     1     1     1                                                                                                     
 2     1     1     1 

edit: I see I misread the OP. This is a bit tough. You can get 'Col2','Col3','Col4' using the pandas.IndexSlice as I demonstrated above. I'm trying to figure out how to include 'Col54' into that.

Related