如何删除H2OFrame中的行?

时间:2016-07-12 17:05:08

标签: python h2o

我已经在h2o R包中工作了很长一段时间,但是最近不得不转移到python包。

在大多数情况下,H2OFrame设计为像pandas DataFrame对象一样工作。然而,如果我想放弃一些行,我有可能在Pandas中设法克服几个障碍:

df.drop([0,1,2], axis=0, inplace=True)

但是,我无法弄清楚如何使用H2OFrame

执行相同操作
frame.drop([0,1,2], axis=0)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-30-0eff75c48e35> in <module>()
----> frame.drop([0,1,2], axis=0)

TypeError: drop() got an unexpected keyword argument 'axis'

他们的github来源文件表明drop方法仅适用于列,所以显然显而易见的方法是:

def drop(self, i):
    """Drop a column from the current H2OFrame.

有没有办法从H2OFrame删除行?

2 个答案:

答案 0 :(得分:4)

目前,H2OFrame.drop方法不支持此功能,但我们添加了ticket以添加对删除多行(以及多列)的支持。

与此同时,您可以按索引对行进行子集化:

import h2o
h2o.init(nthreads = -1)

hf = h2o.H2OFrame([[1,3],[4,5],[3,0],[5,5]])  # 4 rows x 2 columns
hf2 = hf[[1,3],:]  # Keep some of the rows by passing an index

请注意,索引列表[1,3]已订购。如果您尝试传递[3,1],则会收到错误消息。 H2O不会重新排序行,这是告诉你的方式。如果您有一个无序索引列表,请先将sorted函数包围起来。

hf2 = hf[sorted([3,3]),:]

最后,如果您愿意,也可以将新的子集框架重新分配给原始框架名称,如下所示:

hf = hf[[1,3],:]

答案 1 :(得分:2)

由于现在支持,我想突出显示如何按索引删除的注释:

df = df.drop([0,1,2], axis=0)

如果axis = 1(默认值),则删除列;如果axis = 0则删除行。

drop(index, axis=1)

其中index是要删除的列索引,列名或行索引的列表;或者按名称删除单个列的字符串;或者通过索引删除单个列的int。