我正在使用sci-kit学习线性回归算法。 缩放Y目标功能时:
Ys = scaler.fit_transform(Y)
我知道了
ValueError:预期的2D数组,取而代之的是1D数组:
之后,我使用以下方法重塑了
Ys = scaler.fit_transform(Y.reshape(-1,1))
但是又出现了错误:
AttributeError:“系列”对象没有属性“重塑”
所以我检查了pandas.Series文档页面,上面写着:
reshape(* args,** kwargs)从0.19.0版开始弃用。
答案 0 :(得分:18)
答案 1 :(得分:1)
解决方案的确可以做到:
Y.values.reshape(-1,1)
这将使用您的pandas Series对象的值提取一个numpy数组,然后将其重塑为2D数组。
您需要执行此操作的原因是,熊猫系列对象是设计使然的一维。如果您想留在pandas库中,另一种解决方案是将Series转换为DataFrame,然后将其转换为2D:
Y = pd.Series([1,2,3,1,2,3,4,32,2,3,42,3])
scaler = StandardScaler()
Ys = scaler.fit_transform(pd.DataFrame(Y))
答案 2 :(得分:1)
您无法重塑熊猫系列,因此需要对numpy数组执行操作。正如其他人所建议的,您可以使用y.values.reshape(-1, 1)
,但如果您想打动您的朋友,则可以使用:
y.values[Ellipsis, None]
等同于:
y.values[..., None]
这基本上是指<em>所有维度,然后是最后一个维度。这是一个完整的示例:
import numpy as np
import pandas as pd
from sklearn.preprocessing import StandardScaler
y = pd.Series(np.random.rand(5))
0 0.497165
1 0.818659
2 0.327064
3 0.772548
4 0.095715
dtype: float64
scaler = StandardScaler()
scaler.fit_transform(y.values[Ellipsis, None])
array([[-0.019],
[ 1.165],
[-0.645],
[ 0.995],
[-1.496]])