AttributeError:“系列”对象没有属性“重塑”

时间:2018-12-11 12:10:18

标签: python python-3.x pandas reshape attributeerror

我正在使用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版开始弃用。

3 个答案:

答案 0 :(得分:18)

解决方案是通过documentation page上的重塑方法链接的。

装有Y.reshape(-1,1)的您需要使用:

Y.values.reshape(-1,1)

答案 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]])