如何从 pydatatable 数据框中删除列列表?
How to remove a list of columns from pydatatable dataframe?
我创建了一个数据表框架:
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]})
我已经创建了一个自定义函数 select 框架 DT
中所需列的列表,如
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_remove_cols(comidas_gen_dt, 'id', 'country', 'egg')
它抛出错误
TypeError: Computed columns cannot be used in .remove()
你能帮我看看如何继续吗?
从框架中删除列(或行)很容易:采用您通常用于 select 这些列的任何语法,然后附加 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]
如果您想保持原始框架不变,然后 select 一个新的框架并删除一些列,那么最简单的方法是先复制框架,然后使用 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"
也可以替换为任何变量。
我创建了一个数据表框架:
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]})
我已经创建了一个自定义函数 select 框架 DT
中所需列的列表,如
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_remove_cols(comidas_gen_dt, 'id', 'country', 'egg')
它抛出错误
TypeError: Computed columns cannot be used in
.remove()
你能帮我看看如何继续吗?
从框架中删除列(或行)很容易:采用您通常用于 select 这些列的任何语法,然后附加 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]
如果您想保持原始框架不变,然后 select 一个新的框架并删除一些列,那么最简单的方法是先复制框架,然后使用 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"
也可以替换为任何变量。