Scikit/Numpy/Pandas ValueError: setting an array element with sequence

Scikit/Numpy/Pandas ValueError: setting an array element with sequence

我有一个 pandas 数据框,其中的列名称为 0-9 的字符串:

working_df = pd.DataFrame(np.random.rand(5,10),index=range(0,5), columns=[str(x) for x in range(10)])
working_df.loc[:,'outcome'] = [0,1,1,0,1]

然后我想将所有这些数字组成的数组放到一列中,所以我这样做了:

array_list = [Y for Y in x[[str(num) for num in range(10)]].values]

这给了我:

[array([ 0.0793451 ,  0.3288617 ,  0.75887129,  0.01128641,  0.64105905,
         0.78789297,  0.69673768,  0.20354558,  0.48976411,  0.72848541]),
 array([ 0.53511388,  0.08896322,  0.10302786,  0.08008444,  0.18218731,
         0.2342337 ,  0.52622153,  0.65607384,  0.86069294,  0.8864577 ]),
 array([ 0.82878026,  0.33986175,  0.25707122,  0.96525733,  0.5897311 ,
         0.3884232 ,  0.10943644,  0.26944414,  0.85491211,  0.15801284]),
 array([ 0.31818888,  0.0525836 ,  0.49150727,  0.53682492,  0.78692193,
         0.97945708,  0.53181293,  0.74330327,  0.91364064,  0.49085287]),
 array([ 0.14909577,  0.33959452,  0.20607263,  0.78789116,  0.41780657,
         0.0437907 ,  0.67697385,  0.98579928,  0.1487507 ,  0.41682309])]

然后我使用以下方法将其附加到我的数据框:

working_df.loc[:,'array_list'] = pd.Series(array_list)

然后我设置 rf_clf = RandomForestClassifier() 并尝试 rf_clf.fit(working_df['array_list'][1:].values, working_df['outcome'][1:].values) 结果是 ValueError: setting an array element with sequence

是不是fitting中数组数组的问题?感谢您的任何见解。

问题是 scikit-learn 需要一个二维值数组作为输入。您正在传递一个一维对象数组(每个对象本身都是一个一维数组)。

一个快速的解决方法是:

X = np.array(list(working_df['array_list'][1:]))
y = working_df['outcome'][1:].values
rf_clf.fit(X, y)

更好的解决方法是不要将二维特征数组存储在一维 pandas 列中。