You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于数据类型取消选择PyDatatable中的整数与布尔类型列?

解决datatable中按类型移除列的问题

嘿,我明白你遇到的问题了——f[:].remove()确实不能直接传入数据类型来删除列,因为这个方法只接受**列引用(比如f.x、f.v)**或者列名,不支持直接用stype作为参数。不过我们可以换个思路,先筛选出想要保留的列(也就是非int32和bool8类型的列),再用这些列来索引数据表。

方法一:通过列名筛选

先遍历所有列名,检查每列的类型是否属于要排除的类型,收集保留的列名后再选择:

from datatable import dt

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] })

# 收集非int32和bool8类型的列名
keep_cols = [col for col in DT_X.names if DT_X.stypes[DT_X.names.index(col)] not in (dt.int32, dt.bool8)]
# 选择这些列
filtered_dt = DT_X[:, keep_cols]

方法二:通过列位置筛选

如果更习惯用列的索引位置来操作,可以这样做:

# 获取要保留的列的索引位置
keep_positions = [i for i, stype in enumerate(DT_X.stypes) if stype not in (dt.int32, dt.bool8)]
# 按位置选择列
filtered_dt = DT_X[:, keep_positions]

方法三:用datatable的列表达式(更原生)

如果你想保持datatable的链式风格,也可以用列表推导式生成列表达式:

from datatable import f

filtered_dt = DT_X[:, [f[col] for col in DT_X.names if DT_X.stypes[DT_X.names.index(col)] not in (dt.int32, dt.bool8)]]

验证结果

执行以上任意一种方法后,filtered_dt的列会是y(float64)、z(str32)、r(float64),正好排除了所有int32和bool8类型的列,完全符合你的需求。

内容的提问来源于stack exchange,提问作者myamulla_ciencia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 07:57:40