我有一个Pandas数据帧,它有Encoding: latin-1
,由;
分隔。数据帧非常大,几乎有 size: 350000 x 3800
个。我最初想使用 sklearn,但我的数据帧缺少值(NAN values
),所以我无法使用 sklearn 的随机森林或 GBM。所以我不得不使用H2O's
分布式随机森林来训练数据集。主要问题是当我h2o.H2OFrame(data)
时数据帧没有有效地转换。我检查了提供编码选项的可能性,但文档中没有任何内容。
有人对此有想法吗?任何线索都可以帮助我。我还想知道是否有其他库(如 H2O)可以非常有效地处理 NAN 值?我知道我们可以插补列,但我不应该在我的数据集中这样做,因为我的列是来自不同传感器的值,如果值不存在,则意味着传感器不存在。我只能使用Python
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)
由于您面临的问题是由于数据集中的大量 NN,因此应首先处理此问题。有两种方法可以做到这一点。
将
NAN
替换为单个明显超出范围的值。前任。如果某个要素在 0-1 之间变化,则将该功能的所有NAN
替换为 -1。使用类估算器来处理 NAN 值。这会将
NAN
替换为该要素的平均值、中位数或众数之一。
如果数据中有大量缺失值,并且您希望提高转换效率,我建议您明确指定列类型和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()
指定列 dtype 和 NA 字符串将为您提供最大的加速。