【问题标题】:Python - h2o: How to specifiy column types correctly?Python - h2o:如何正确指定列类型?
【发布时间】:2018-07-30 20:45:27
【问题描述】:

我正在尝试将 pandas 数据框导入到 h2o 框架中并指定我想要的列类型。问题是我最终尝试使用两个数据集执行 .rbind(),但有时取决于某些列的值,h2o 会强制它们为实数或整数,然后它们无法执行 .rbind(),因为列类型是不同的。我想确保我可以获得具有相同列类型的两个不同数据集,以便这些失败发生。

下面的可重现示例:

import pandas as pd
import h2o

my_df1 = pd.DataFrame({'a':[1,1,0,0,1],
                       'b':[1,0,.5,.2,0]})

my_df2 = pd.DataFrame({'a':[.5,.8,0,0,1],
                       'b':[1,0,.5,.2,0]})

h2o.init()
my_h2o1 = h2o.H2OFrame(my_df1)
my_h2o2 = h2o.H2OFrame(my_df2)

my_h2o1.rbind(my_h2o2)  ### This fails

### try to manually specify the column names and types
col_names = [k for k in my_h2o1.types.keys()]
col_types = [v for v in my_h2o1.types.values()]

my_h2o3 = h2o.H2OFrame(my_df2,column_names=col_names, column_types=col_types)

my_h2o1.types.values() == my_h2o3.types.values()

my_h2o1.rbind(my_h2o3)  ### This fails still

【问题讨论】:

    标签: python h2o


    【解决方案1】:

    将列类型转换为 H2OFrame 后尝试转换它

    # check types
    In [38]: my_h2o1.types
    Out[38]: {'a': 'int', 'b': 'real'}
    
    In [39]: my_h2o2.types
    Out[39]: {'a': 'real', 'b': 'real'}
    

    因为我们需要my_h2o1['a'] 是实数类型(因为一旦你绑定了列,你就会有实数和整数的混合)。我们可以使用asnumeric()

    my_h2o1['a'] = my_h2o1['a'].asnumeric()

    一旦我们有了匹配的类型,我们就可以使用rbind 方法

    my_h2o1.rbind(my_h2o2)

    【讨论】:

    • 感谢您的回复。我逐案了解此修复程序,但我希望能够在知道未来可能出现的任何问题之前能够在大型数据集上预先设置所有列类型。我最终只是做了一个循环,通过 my_h2o1.types.items() 并寻找任何“int”数据类型并将它们转换为 .asnumeric()。我仍然认为如果 H2OFrame 中的 column_types 参数起作用会很好,但这有助于解决问题。
    • 如果您想跟踪它,希望能解决列类型的前期规范,我将您的问题包含在此 jira 票证 (0xdata.atlassian.net/browse/PUBDEV-5166) 的 cmets 中。
    猜你喜欢
    • 2020-09-20
    • 2019-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    相关资源
    最近更新 更多