我正在尝试将pandas数据框导入h2o框架并指定所需的列类型。问题是最终尝试对两个数据集执行.rbind(),但是有时取决于某些列的值,h2o会迫使它们为实数或int,然后它们将无法执行.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
答案 0 :(得分: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)