Selecting multiple columns in a pandas dataframe

后端 未结 19 1794
醉话见心
醉话见心 2020-11-22 00:08

I have data in different columns but I don\'t know how to extract it to save it in another variable.

index  a   b   c
1      2   3   4
2      3   4   5
         


        
19条回答
  •  太阳男子
    2020-11-22 00:23

    As of version 0.11.0, columns can be sliced in the manner you tried using the .loc indexer:

    df.loc[:, 'C':'E']
    

    is equivalent of

    df[['C', 'D', 'E']]  # or df.loc[:, ['C', 'D', 'E']]
    

    and returns columns C through E.


    A demo on a randomly generated DataFrame:

    import pandas as pd
    import numpy as np
    np.random.seed(5)
    df = pd.DataFrame(np.random.randint(100, size=(100, 6)), 
                      columns=list('ABCDEF'), 
                      index=['R{}'.format(i) for i in range(100)])
    df.head()
    
    Out: 
         A   B   C   D   E   F
    R0  99  78  61  16  73   8
    R1  62  27  30  80   7  76
    R2  15  53  80  27  44  77
    R3  75  65  47  30  84  86
    R4  18   9  41  62   1  82
    

    To get the columns from C to E (note that unlike integer slicing, 'E' is included in the columns):

    df.loc[:, 'C':'E']
    
    Out: 
          C   D   E
    R0   61  16  73
    R1   30  80   7
    R2   80  27  44
    R3   47  30  84
    R4   41  62   1
    R5    5  58   0
    ...
    

    Same works for selecting rows based on labels. Get the rows 'R6' to 'R10' from those columns:

    df.loc['R6':'R10', 'C':'E']
    
    Out: 
          C   D   E
    R6   51  27  31
    R7   83  19  18
    R8   11  67  65
    R9   78  27  29
    R10   7  16  94
    

    .loc also accepts a boolean array so you can select the columns whose corresponding entry in the array is True. For example, df.columns.isin(list('BCD')) returns array([False, True, True, True, False, False], dtype=bool) - True if the column name is in the list ['B', 'C', 'D']; False, otherwise.

    df.loc[:, df.columns.isin(list('BCD'))]
    
    Out: 
          B   C   D
    R0   78  61  16
    R1   27  30  80
    R2   53  80  27
    R3   65  47  30
    R4    9  41  62
    R5   78   5  58
    ...
    

提交回复
热议问题