如何根据类型取消选择 pydatatable 列?
How to deselect pydatatable columns based on their types?
我创建了一个数据表,
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)
我现在可以 select 整数和布尔类型列作为
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]
按照建议,可以使用此代码删除select列,
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]
那么,如何去除select 仅整数和布尔类型的列?。下面的代码块没有解决
DT_X[:,f[:].remove([dt.int32,dt.bool8])]
我已经找到解决方法。
首先我收集了所需的列名并在其上创建了一个 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]
使用 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]])]
我创建了一个数据表,
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)
我现在可以 select 整数和布尔类型列作为
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]
按照建议,可以使用此代码删除select列,
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]
那么,如何去除select 仅整数和布尔类型的列?。下面的代码块没有解决
DT_X[:,f[:].remove([dt.int32,dt.bool8])]
我已经找到解决方法。
首先我收集了所需的列名并在其上创建了一个 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]
使用 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]])]