Python Создать копию кадра h2o - PullRequest
0 голосов
/ 03 мая 2018

Я очень привык к инфраструктуре h2o от R, но у меня возникли некоторые проблемы с настройкой некоторых аспектов h2o в python.

Я знаю, что вы можете создать копию фрейма данных pandas с помощью метода .copy (), чтобы при обновлении нового фрейма данных вы также не обновляли оригинальный. Имеют ли рамки 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. 

1 Ответ

0 голосов
/ 03 мая 2018

Если вы хотите создать копию фрейма данных, вы можете использовать h2o.deep_copy(data, xid). (где xid - это идентификатор строки, который вы даете для бэкэнда H2OFrame)

если у вас есть датафрейм 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')
...