代码之家  ›  专栏  ›  技术社区  ›  Nate Thompson

Python-h2o:如何正确地指定列类型?

  •  1
  • Nate Thompson  · 技术社区  · 6 年前

    我正试图将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
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Lauren    6 年前

    在将柱类型转换为水框架后,尝试将其转换为

    # 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'] 要成为real类型(因为一旦您查找列,您将混合使用real和integer)。我们可以利用 asnumeric() .

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

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

    my_h2o1.rbind(my_h2o2)