如何在H2OFrame中删除行?

8
我已经在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个回答

4

现在已经支持这个功能,我想强调一下注释中如何按索引删除的方法:

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

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

drop(index, axis=1)

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


4

目前,H2OFrame.drop方法不支持此功能,但我们已经添加了一个工单以添加删除多行(和多列)的支持。

同时,您可以通过索引对行进行子集处理:

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],:]

从来没有想过像numpy数组一样切片。谢谢! - TayTay
使用 axis 参数也可以达到相同的效果:df = df.drop([0,1,2],axis = 0)。但 inplace 不行。 - Alex F

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接