我很习惯来自R的h2o框架,但在python中调整到h2o的某些方面时遇到一些麻烦。
我知道您可以使用.copy()方法创建一个pandas数据框的副本,这样当您更新新数据框时,您也不会更新原始数据框。 h2o帧有类似的功能吗?更复杂的是,h2o帧似乎不符合功能本地/全局环境规则。
下面是一个示例,似乎只有我可以创建框架的.copy,或者让函数本地环境不更新我的全局环境,它将解决我的问题。如果我在R中创建同样的东西,那么它的行为完全符合预期,并且实际上并没有修改我原来的h2o框架中的列,那么如何让python以相同的方式工作呢?
##### A FUNCTION TO CHANGE THE VALUE OF A COLUMN
def test_func(train_df,
var):
train_df[var] = train_df[var].log()
return(train_df)
##### TRY TO CREATE A NEW COPY OF THE FRAME WITH THE COLUMN CHANGED
new_df = test_func(train_df = old_df,
var = 'target')
##### THE COLUMN IN BOTH new_df AND old_df has both been changed.
答案 0 :(得分:2)
如果要创建数据框的副本,可以使用h2o.deep_copy(data, xid)
。 (其中xid是您为后端H2OFrame提供的字符串ID)
如果你有数据帧df并且你做了
old_df = df
new_df = df
old_df和new_df都会在后端指向相同的h2oframe(df),因此对old_df所做的任何更改都将反映在new_df中。
如果您想将更改分开,您可以这样做:
new_df = h2o.deep_copy(df, 'new_df')