Pandas 在将数据帧列传递给scikit学习回归器之前,是否应以某种方式对其进行转换?

Pandas 在将数据帧列传递给scikit学习回归器之前,是否应以某种方式对其进行转换?,pandas,scikit-learn,Pandas,Scikit Learn,我有一个熊猫数据帧,并将df[列列表]作为X和df[[单列]]作为Y传递给一个随机森林回归器 以下警告是什么意思?应该采取什么措施来解决 DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel(). probas = cfr.fit(trains

我有一个熊猫数据帧,并将
df[列列表]
作为X和
df[[单列]]
作为
Y
传递给一个随机森林回归器

以下警告是什么意思?应该采取什么措施来解决

DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().   probas = cfr.fit(trainset_X, trainset_Y).predict(testset_X)

只需检查
Y
变量的形状,它应该是一个一维对象,并且可能传递的是更多(可能是微不足道)维度的对象。将其重塑为列表/1d数组的形式。

您可以使用
df.single\u column.values
df['single\u column'].values
来获取序列的基本numpy数组(在这种情况下,该数组也应该具有lejlot提到的正确的1d形状)。

实际上,警告会准确地告诉您问题所在:

您传递了一个2d数组,该数组的格式恰好是
(X,1)
,但该方法需要一个1d数组,并且必须是
(X,)


此外,警告还告诉您如何转换为所需的格式:
y.values.ravel()

使用
y=df[[single\u column]].values.ravel()
为我解决了
数据转换警告问题。

为什么在
single\u column
周围有双方括号?'single\u column'有目标列名,“熊猫”列选择需要一个列表,因此列名用方括号括起来。否,不需要。如果您忽略了它们,您就不会得到警告。
AttributeError:“DataFrame”对象没有属性“ravel”
@mehaase它并不是真的打算盲目复制粘贴的。这更多的是解释发生了什么以及为什么。对于盲复制粘贴,请使用以下命令:
y.values.ravel()