Selecting Pandas Columns by dtype

后端 未结 9 2044
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-11-29 01:22

I was wondering if there is an elegant and shorthand way in Pandas DataFrames to select columns by data type (dtype). i.e. Select only int64 columns from a DataFrame.

<
9条回答
  •  一向
    一向 (楼主)
    2020-11-29 01:34

    I'd like to extend existing answer by adding options for selecting all floating dtypes or all integer dtypes:

    Demo:

    np.random.seed(1234)
    
    df = pd.DataFrame({
            'a':np.random.rand(3), 
            'b':np.random.rand(3).astype('float32'), 
            'c':np.random.randint(10,size=(3)).astype('int16'),
            'd':np.arange(3).astype('int32'), 
            'e':np.random.randint(10**7,size=(3)).astype('int64'),
            'f':np.random.choice([True, False], 3),
            'g':pd.date_range('2000-01-01', periods=3)
         })
    

    yields:

    In [2]: df
    Out[2]:
              a         b  c  d        e      f          g
    0  0.191519  0.785359  6  0  7578569  False 2000-01-01
    1  0.622109  0.779976  8  1  7981439   True 2000-01-02
    2  0.437728  0.272593  0  2  2558462   True 2000-01-03
    
    In [3]: df.dtypes
    Out[3]:
    a           float64
    b           float32
    c             int16
    d             int32
    e             int64
    f              bool
    g    datetime64[ns]
    dtype: object
    

    Selecting all floating number columns:

    In [4]: df.select_dtypes(include=['floating'])
    Out[4]:
              a         b
    0  0.191519  0.785359
    1  0.622109  0.779976
    2  0.437728  0.272593
    
    In [5]: df.select_dtypes(include=['floating']).dtypes
    Out[5]:
    a    float64
    b    float32
    dtype: object
    

    Selecting all integer number columns:

    In [6]: df.select_dtypes(include=['integer'])
    Out[6]:
       c  d        e
    0  6  0  7578569
    1  8  1  7981439
    2  0  2  2558462
    
    In [7]: df.select_dtypes(include=['integer']).dtypes
    Out[7]:
    c    int16
    d    int32
    e    int64
    dtype: object
    

    Selecting all numeric columns:

    In [8]: df.select_dtypes(include=['number'])
    Out[8]:
              a         b  c  d        e
    0  0.191519  0.785359  6  0  7578569
    1  0.622109  0.779976  8  1  7981439
    2  0.437728  0.272593  0  2  2558462
    
    In [9]: df.select_dtypes(include=['number']).dtypes
    Out[9]:
    a    float64
    b    float32
    c      int16
    d      int32
    e      int64
    dtype: object
    

提交回复
热议问题