在将 pandas 数据框列传递给 scikit learn 回归器之前,是不是应该以某种方式对其进行转换?
Posted
技术标签:
【中文标题】在将 pandas 数据框列传递给 scikit learn 回归器之前,是不是应该以某种方式对其进行转换?【英文标题】:Should a pandas dataframe column be converted in some way before passing it to a scikit learn regressor?在将 pandas 数据框列传递给 scikit learn 回归器之前,是否应该以某种方式对其进行转换? 【发布时间】:2014-01-19 01:23:14 【问题描述】:我有一个 pandas 数据框,并将 df[list_of_columns]
作为 X 和 df[[single_column]]
作为 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)
【问题讨论】:
为什么single_column
周围有方括号?
'single_column' 有目标列名,pandas 列选择需要一个列表所以列名用方括号括起来
不,它没有。如果您省略了它们,您将不会收到警告。
【参考方案1】:
使用Y = df[[single_column]].values.ravel()
为我解决DataConversionWarning
。
【讨论】:
【参考方案2】:实际上,警告会告诉你到底是什么问题:
您传递了一个二维数组,该数组恰好采用(X, 1)
的形式,但该方法需要一个一维数组并且必须采用(X, )
的形式。
此外,警告会告诉您如何转换为所需的形式:y.values.ravel()
。
【讨论】:
AttributeError: 'DataFrame' object has no attribute 'ravel'
@mehaase 并不是真的要盲目复制粘贴。这更多的是解释发生了什么以及为什么。对于盲目的复制粘贴 - 使用这个:y.values.ravel()
【参考方案3】:
您可以使用 df.single_column.values
或 df['single_column'].values
来获取您的系列的底层 numpy 数组(在这种情况下,它还应该具有 lejlot 提到的正确的一维形状)。
【讨论】:
【参考方案4】:只需检查您的 Y
变量的形状,它应该是一个一维对象,并且您可能正在传递具有更多(可能是微不足道的)维度的东西。 reshape成list/1d数组的形式。
【讨论】:
以上是关于在将 pandas 数据框列传递给 scikit learn 回归器之前,是不是应该以某种方式对其进行转换?的主要内容,如果未能解决你的问题,请参考以下文章
将 Pandas 列传递给函数时出现“ValueError:Series 的真值不明确”
在 pyspark 中,我想将值的数据帧列传递给函数并在该数据列中操作说,第 5 个值