使用h2o.H2OFrame()函数将Pandas数据帧转换为H2O帧时,发生错误。
正在H2o Frame中创建其他行。当我调查这个时,看起来新行与其他行重复。根据数据大小,添加的重复行数会有所不同,但通常约为2-10。
代码:
train_h2o = h2o.H2OFrame(python_obj=train_df_complete)
print(train_df_complete.shape[0])
print(train_h2o.nrow)
输出:
3871998
3872000
正如您在此处所看到的,还添加了2行。当仔细研究时,对于2个用户,现在每个用户有2行。即2行已被复制。
这似乎是一个主要的错误,有没有人有这个问题的经验,有没有办法解决它?
谢谢
答案 0 :(得分:2)
我遇到了同样的问题,假设您的“ train_h2o”没有重复项,只需在数据帧中标识重复项的索引并将其删除即可。不幸的是,h2o数据框的功能有限。
temp_df = train_h2o.as_data_frame()
train_h2o = train_h2o.drop(list(temp_df[temp_df.duplicated()].index), axis=0)
答案 1 :(得分:0)
如果您的数据集可能包含其他并非来自此H2O错误的重复行,则建议的解决方案也会删除这些行。如果要确保仅删除H2O添加的其他行,此解决方案可能会帮助您:
temp_df = train_df_complete.copy()
temp_df['__temp_id__'] = np.arange(len(temp_df))
train_h2o = H2OFrame(temp_df)
train_h2o.drop_duplicates(columns=['__temp_id__'], keep='first')
train_h2o = train_h2o.drop('__temp_id__', axis=1)
我在这里创建的是一个临时列,然后将其用作ID,以便仅删除由H2OFrame生成的重复项。删除重复项后,我将删除临时列。这可能不是最优雅的方法,但它可以工作。
答案 2 :(得分:0)
对于特定的数据集,我也有同样的问题。 在基础数据框架上重置索引对我有用。
import h2o
train_df_complete = train_df_complete.reset_index()
train_h2o = h2o.H2OFrame(train_df_complete)
我正在使用h2o 3.30.1.3。