【问题标题】:How to deselect pydatatable columns based on their types?如何根据类型取消选择数据表列?
【发布时间】:2020-10-09 18:03:09
【问题描述】:

我创建了一个数据表,

DT_X = dt.Frame({'x':[1,2,3,4,5],
          'y':[0.1,0.5,0.9,1.5,4.3],
          'z':['a','b','c','d','e'],
          'u':[True,False,True,False,False],
          'v':[10,20,30,40,50],
          'r':[4.5,5.5,6.5,8.5,10.5]
         })

及其输出为

Out[4]: 
   |  x    y  z    u   v     r
-- + --  ---  --  --  --  ----
 0 |  1  0.1  a    1  10   4.5
 1 |  2  0.5  b    0  20   5.5
 2 |  3  0.9  c    1  30   6.5
 3 |  4  1.5  d    0  40   8.5
 4 |  5  4.3  e    0  50  10.5

[5 rows x 6 columns]

数据表类型可以检查为,

In [5]: DT_X.stypes                                                                                                                                                                                         
Out[5]: 
(stype.int32,
 stype.float64,
 stype.str32,
 stype.bool8,
 stype.int32,
 stype.float64)

我现在可以选择整数和布尔类型的列

DT_X[:,[dt.int32,dt.bool8]]
Out[6]: 
   |  x   v   u
-- + --  --  --
 0 |  1  10   1
 1 |  2  20   0
 2 |  3  30   1
 3 |  4  40   0
 4 |  5  50   0

[5 rows x 3 columns]

按照建议,可以使用此代码取消选择列,

DT_X[:,f[:].remove([f.x,f.v,f.u])]

Out[7]: 
   |   y  z      r
-- + ---  --  ----
 0 | 0.1  a    4.5
 1 | 0.5  b    5.5
 2 | 0.9  c    6.5
 3 | 1.5  d    8.5
 4 | 4.3  e   10.5

[5 rows x 3 columns]

那么,如何只取消选择整数和布尔类型的列?下面的代码块没有解决

DT_X[:,f[:].remove([dt.int32,dt.bool8])]

【问题讨论】:

    标签: python py-datatable


    【解决方案1】:

    使用 f 表达式来包装您要删除的类型:

    DT_X[:,f[:].remove([f[int],f[bool]])]
    
        y   z   r
    ▪▪▪▪▪▪▪▪    ▪▪▪▪    ▪▪▪▪▪▪▪▪
    0   0.1 a   4.5
    1   0.5 b   5.5
    2   0.9 c   6.5
    3   1.5 d   8.5
    4   4.3 e   10.5
    

    对于上面的代码,您需要用 f 表达式包装数据类型:

     DT_X[:,f[:].remove([f[dt.int32], f[dt.bool8]])]
    

    【讨论】:

      【解决方案2】:

      我已经找到了解决方法。

      首先我收集了所需的列名并在其上创建了一个 f 表达式。

      fil_cols = [ f[col] for col in list(DT_X[:,[dt.int32,dt.bool8]].names)]
      

      并将此过滤器应用于数据表,

      DT_X[:,f[:].remove(fil_cols)]
      
      

      它会产生预期的输出。

      Out[5]: 
         |   y  z      r
      -- + ---  --  ----
       0 | 0.1  a    4.5
       1 | 0.5  b    5.5
       2 | 0.9  c    6.5
       3 | 1.5  d    8.5
       4 | 4.3  e   10.5
      
      [5 rows x 3 columns]
      

      【讨论】:

        猜你喜欢
        • 2016-05-31
        • 2021-02-25
        • 2019-11-25
        • 2021-01-25
        • 1970-01-01
        • 2021-04-03
        • 1970-01-01
        • 2014-04-23
        • 2011-05-20
        相关资源
        最近更新 更多