【问题标题】:AttributeError: 'Series' object has no attribute 'reshape'AttributeError:“系列”对象没有属性“重塑”
【发布时间】:2019-05-12 10:20:41
【问题描述】:
我正在使用 sci-kit 学习线性回归算法。
在缩放 Y 目标特征时:
Ys = scaler.fit_transform(Y)
我明白了
ValueError:预期的二维数组,得到一维数组:
之后我使用以下方法重塑:
Ys = scaler.fit_transform(Y.reshape(-1,1))
但又报错了:
AttributeError: 'Series' 对象没有属性 'reshape'
所以我检查了 pandas.Series 文档页面,它说:
reshape(*args, **kwargs) 自 0.19.0 版起已弃用。
【问题讨论】:
标签:
python
python-3.x
pandas
reshape
attributeerror
【解决方案2】:
解决办法确实是这样:
Y.values.reshape(-1,1)
这会使用您的 pandas Series 对象的值提取一个 numpy 数组,然后将其重塑为二维数组。
您需要这样做的原因是 pandas Series 对象在设计上是一维的。如果您想留在 pandas 库中,另一个解决方案是将 Series 转换为 2D 的 DataFrame:
Y = pd.Series([1,2,3,1,2,3,4,32,2,3,42,3])
scaler = StandardScaler()
Ys = scaler.fit_transform(pd.DataFrame(Y))
【解决方案3】:
您无法重塑熊猫系列,因此您需要对 numpy 数组执行操作。正如其他人建议的那样,您可以使用y.values.reshape(-1, 1),但如果您想打动您的朋友,您可以使用:
y.values[Ellipsis, None]
相当于:
y.values[..., None]
它基本上意味着所有维度,然后是最后一个的新维度。这是一个完整的示例:
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]])