AttributeError: 'Series' object has no attribute 'reshape'
AttributeError: 'Series' object has no attribute 'reshape'
我正在使用 sci-kit 学习线性回归算法。
缩放 Y 目标特征时:
Ys = scaler.fit_transform(Y)
我得到了
ValueError: Expected 2D array, got 1D array instead:
之后我使用以下方式重塑:
Ys = scaler.fit_transform(Y.reshape(-1,1))
但是又报错了:
AttributeError: 'Series' object has no attribute 'reshape'
所以我检查了 pandas.Series 文档页面,它说:
reshape(*args, **kwargs) Deprecated since version 0.19.0.
解决方案已链接到 documentation page 上的重塑方法。
您需要使用
而不是 Y.reshape(-1,1)
Y.values.reshape(-1,1)
解决办法确实是这样做的:
Y.values.reshape(-1,1)
这将使用您的 pandas 系列对象的值提取一个 numpy 数组,然后将其重新整形为二维数组。
您需要这样做的原因是 pandas 系列对象在设计上是一维的。如果您想留在 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))
你不能重塑一个pandas系列,所以你需要在一个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]])
使用 MinMaxScaler 将 Series 转换为 Dataframe 对我有效。
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
Y = scaler.fit_transform(pd.DataFrame(y))
我正在使用 sci-kit 学习线性回归算法。 缩放 Y 目标特征时:
Ys = scaler.fit_transform(Y)
我得到了
ValueError: Expected 2D array, got 1D array instead:
之后我使用以下方式重塑:
Ys = scaler.fit_transform(Y.reshape(-1,1))
但是又报错了:
AttributeError: 'Series' object has no attribute 'reshape'
所以我检查了 pandas.Series 文档页面,它说:
reshape(*args, **kwargs) Deprecated since version 0.19.0.
解决方案已链接到 documentation page 上的重塑方法。
您需要使用
而不是Y.reshape(-1,1)
Y.values.reshape(-1,1)
解决办法确实是这样做的:
Y.values.reshape(-1,1)
这将使用您的 pandas 系列对象的值提取一个 numpy 数组,然后将其重新整形为二维数组。
您需要这样做的原因是 pandas 系列对象在设计上是一维的。如果您想留在 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))
你不能重塑一个pandas系列,所以你需要在一个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]])
使用 MinMaxScaler 将 Series 转换为 Dataframe 对我有效。
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
Y = scaler.fit_transform(pd.DataFrame(y))