将pandas数据帧有效转换为h2o帧

时间:2017-10-27 09:37:27

标签: python machine-learning h2o

我有一个Pandas数据框,其Encoding: latin-1;分隔。数据框非常大,几乎为size: 350000 x 3800。我最初想使用sklearn,但我的数据框缺少值(NAN values),所以我无法使用sklearn的随机森林或GBM。所以我不得不使用H2O's分布式随机森林来训练数据集。主要问题是当我h2o.H2OFrame(data)时,数据帧没有被有效转换。我检查了提供编码选项的可能性,但文档中没有任何内容。

有人对此有所了解吗?任何线索都可以帮助我。我还想知道是否有其他像H2O这样的库可以非常有效地处理NAN值?我知道我们可以归因于列,但我不应该在我的数据集中这样做,因为我的列是来自不同传感器的值,如果值不存在则意味着传感器不存在。我只能使用Python

2 个答案:

答案 0 :(得分:14)

import h2o
import pandas as pd

df = pd.DataFrame({'col1': [1,1,2], 'col2': ['César Chávez Day', 'César Chávez Day', 'César Chávez Day']})
hf = h2o.H2OFrame(df)

由于您遇到的问题是由于数据集中的NAN数量很多,因此应首先处理此问题。有两种方法可以做到。

  1. NAN替换为一个明显超出范围的值。 防爆。如果某个功能在0-1之间变化,请将所有NAN替换为该功能的-1。

  2. 使用班级Imputer来处理NAN值。这会将NAN替换为该功能的均值,中位数或模式。

答案 1 :(得分:2)

如果数据中存在大量缺失值,并且您希望提高转换效率,我建议明确指定列类型和NA字符串,而不是让H2O解释它。您可以将要解释为NA的字符串列表和指定列类型的字典传递给H2OFrame()方法。

它还允许您为不存在的传感器创建自定义标签,而不是具有通用"不可用" (用pandas中的自定义字符串表示NaN值)。

import h2o    

col_dtypes = {'col1_name':col1_type, 'col2_name':col2_type}
na_list = ['NA', 'none', 'nan', 'etc']

hf = h2o.H2OFrame(df, column_types=col_dtypes, na_strings=na_list)

有关详情,请访问http://docs.h2o.ai/h2o/latest-stable/h2o-py/docs/_modules/h2o/frame.html#H2OFrame

编辑:@ErinLeDell建议直接使用h2o.import_file()指定列dtypes和NA字符串将为您提供最大的加速。