Python 如何从pydatatable dataframe中删除列列表?

Python 如何从pydatatable dataframe中删除列列表?,python,py-datatable,Python,Py Datatable,我创建了一个datatable框架,如下所示: comidas_gen_dt = dt.Frame({ 'country':list('ABCDE'), 'id':[1,2,3,4,5], 'egg':[10,20,30,5,40], 'veg':[30,40,10,3,5], 'fork':[5,10,2,1,9], 'beef':[90,50,20,None,4]}) 我已经创建了一个自定义函数,用于从框架DTas中选择所需列的列表 def

我创建了一个datatable框架,如下所示:

comidas_gen_dt = dt.Frame({
    'country':list('ABCDE'),
    'id':[1,2,3,4,5],
    'egg':[10,20,30,5,40],
    'veg':[30,40,10,3,5],
    'fork':[5,10,2,1,9],
    'beef':[90,50,20,None,4]})
我已经创建了一个自定义函数,用于从框架
DT
as中选择所需列的列表

def pydt_select_cols(DT, *rmcols):
    return DT[:, *dt_cols]
因此,以下是从DT中删除列的推荐语法:

DT[:, f[:].remove([f.a, f.b, f.c])
按照DT的上述语法,我创建了另一个自定义函数,将列列表保留为

def pydt_remove_cols(DT, *rmcols):
    dt_cols = [*rmcols]
    return DT[:, f[:].remove(dt_cols)]
我正在执行这个函数

pydt\u remove\u cols(comidas\u gen\u dt,'id','country','egg')
这是一个错误

TypeError:计算列不能用于
.remove()

您能帮助我如何继续吗?

从框架中删除列(或行)很简单:使用通常用于选择这些列的任何语法,然后附加python
del
关键字

因此,如果要删除列
'id'
'country'
'egg'
,请运行

>>> del comidas_gen_dt[:, ['id','country','egg']]
>>> comidas_gen_dt
   | veg  fork  beef
-- + ---  ----  ----
 0 |  30     5    90
 1 |  40    10    50
 2 |  10     2    20
 3 |   3     1    NA
 4 |   5     9     4

[5 rows x 3 columns]
如果要保持原始帧不被修改,然后选择一个新帧并删除某些列,最简单的方法是先复制帧,然后使用
del
操作:

>>> DT = comidas_gen_dt.copy()
>>> del DT[:, columns_to_remove]
(请注意,
.copy()
制作浅拷贝,即其成本通常可以忽略不计)

您还可以使用
f[:].remove()方法。有点奇怪,它没有像您编写的那样工作,但是从字符串列表到
f
-符号列表非常简单:

def pydt_remove_cols(DT, *rmcols):
    return DT[:, f[:].remove([f[col] for col in rmcols])]

在这里,我使用了一个事实,即
f.A
f[“A”]
相同,其中内部字符串
“A”
也可以替换为任何变量。

试试看,不会有效果。是的,我知道第一种方法,我已经对如何使用进行了完整的说明。在多个列上删除。再次感谢您的快速回复