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

Posted

技术标签:

【中文标题】有效地将 pandas 数据帧转换为 h2o 帧【英文标题】:conversion of pandas dataframe to h2o frame efficiently 【发布时间】:2018-04-08 21:04:10 【问题描述】:

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

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

【问题讨论】:

Xgboost 可以完美处理缺失值。 @CrazyElf,是的,我阅读了有关 xgboost 的信息,但问题是我无法从源代码进行构建,因为我没有在工作场所的笔记本电脑上安装 git 或 mingw 的管理员权限。但我可以使用 pip,不幸的是,xgboost 对 pip 的支持已被删除 您可以尝试从这里安装 xgboost:lfd.uci.edu/~gohlke/pythonlibs/#xgboost 对我来说效果很好。 @CrazyElf 谢谢你的链接,我会立即尝试 @CrazyElf:链接中的***文件适用于 Windows,我使用的是 Linux,我忘了提及 【参考方案1】:
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,因此应首先处理此问题。有两种方法可以做到这一点。

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

    使用类 Imputer 来处理 NAN 值。这会将NAN 替换为该特征的均值、中值或众数。

【讨论】:

@Anand CU。我在做同样的事情,但我认为由于数据框的大小,类型转换效率不高 @ayaan 您的数据集中是否有太多 NAN?数据集中 NAN 值的百分比是多少? 是的,我的数据帧中大约 40% 是 NAN @ayaan 一种选择是用一个明显超出范围的值替换nan。前任 。如果某个功能在0-1 之间变化,则将该功能的所有nan 替换为-1。那么你也可以使用 sklearn 的算法 @ayaan 或者您也可以使用 Imputer 类来处理 NAN【参考方案2】:

如果您的数据中有大量缺失值,并且您想提高转换效率,我建议明确指定列类型和NA 字符串,而不是让 H2O 解释它。您可以将要解释为NAs 的字符串列表和指定列类型的字典传递给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 字符串将为您提供最大的加速。

【讨论】:

谢谢,我会试试这个,让你知道 如果 pandas 数据框已经指定了类型,为什么 H2O 需要明确传入的类型?

以上是关于有效地将 pandas 数据帧转换为 h2o 帧的主要内容,如果未能解决你的问题,请参考以下文章

Python pandas 通过 dt 访问器有效地将日期时间转换为时间戳

pyspark数据帧转置问题

将pandas数据帧转换为具有多个键的字典

在 pandas 数据帧上应用 Pyspark 管道

高效地将大型 Pandas 数据帧读取到磁盘

如何正确地将数据帧的所有日期时间列转换为 iso 格式