列表中的数组
Array inside list
我真的很困惑试图解决这个问题。我正在尝试使用 sklearn 函数:MinMaxScaler
但出现错误,因为我似乎正在设置一个带有序列的数组元素。
密码是:
raw_values = series.values
# transform data to be stationary
diff_series = difference(raw_values, 1);
diff_values = diff_series.values;
diff_values = diff_values.reshape(len(diff_values), 1)
# rescale values to 0,1
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_values = scaler.fit_transform(diff_values); print(scaled_values)
scaled_values = scaled_values.reshape(len(scaled_values), 1)
"series" 是一个差异时间序列,我试图在 [0,1] 和 MinMaxScaler
之间重新缩放,并且时间序列之前在 pandas 中有所差异。
当 运行 代码时出现以下错误:
ValueError: setting an array element with a sequence.
我不明白的是,如果一列中只有一个 feature
或变量,代码运行正常,但在这种情况下 我有 2 features
,每一个在不同的列中。
回溯:
File "C:/....py", line 88, in prepare_data
scaled_values = scaler.fit_transform(diff_values); print(scaled_values)
File "C:\Users\name\AppData\Roaming\Python\Python35\site-packages\sklearn\base.py", line 494, in fit_transform
return self.fit(X, **fit_params).transform(X)
File "C:\Users\name\AppData\Roaming\Python\Python35\site-packages\sklearn\preprocessing\data.py", line 292, in fit
return self.partial_fit(X, y)
File "C:\Users\name\AppData\Roaming\Python\Python35\site-packages\sklearn\preprocessing\data.py", line 318, in partial_fit
estimator=self, dtype=FLOAT_DTYPES)
File "C:\Users\name\AppData\Roaming\Python\Python35\site-packages\sklearn\utils\validation.py", line 382, in check_array
array = np.array(array, dtype=dtype, order=order, copy=copy)
ValueError: setting an array element with a sequence.
这就是我打印 diff_values
得到的结果
[[array([ -1.3, 119. ])]
[array([ 0.5, -9. ])]
[array([ 0.8, 17. ])]
...,
[array([ 2.8, 742. ])]
[array([ 1.50000000e+00, -1.65900000e+03])]
[array([ -2., 856.])]]
完整代码不是我的,它是从 here
获得的
编辑:
Here 是我的数据集
只要把名字'shampoo-sales.csv'换成'datos2.csv'和这句话:
return datetime.strptime('190'+x, '%Y-%m')
给这个:
return datetime.strptime(''+x, '%Y-%m-%d')
在您链接的教程中,object series
实际上是 Pandas Series
。它是一个信息向量,带有一个命名索引。然而,您的数据集包含两个信息字段,以及时间序列索引,这使其成为 DataFrame
。这就是教程代码与您的数据中断的原因。
这是您的数据示例:
import pandas as pd
def parser(x):
return datetime.strptime(''+x, '%Y-%m-%d')
df = pd.read_csv("datos2.csv", header=None, parse_dates=[0],
index_col=0, squeeze=True, date_parser=parser)
df.head()
1 2
0
2012-01-01 10.9 3736
2012-01-02 10.3 3570
2012-01-03 9.0 3689
2012-01-04 9.5 3680
2012-01-05 10.3 3697
以及教程中的等效部分:
"Running the example loads the dataset as a Pandas Series and prints the first 5 rows."
Month
1901-01-01 266.0
1901-02-01 145.9
1901-03-01 183.1
1901-04-01 119.3
1901-05-01 180.3
Name: Sales, dtype: float64
要验证这一点,select 您的一个字段并将其存储为 series
,然后尝试 运行 宁 MinMaxScaler
。您会看到 运行s 没有错误:
series = df[1]
# ... compute difference and do scaling ...
print(scaled_values)
[[ 0.58653846]
[ 0.55288462]
[ 0.63942308]
...,
[ 0.75 ]
[ 0.6875 ]
[ 0.51923077]]
注意:与教程数据相比,您的数据集中的另一个细微差别是您的数据中没有 header。设置 header=None
以避免将第一行数据分配为列 headers.
更新
要将整个数据集传递给 MinMaxScaler
,只需在两列上 运行 difference()
并传递转换后的向量以进行缩放。 MinMaxScaler
接受 n-dimensional DataFrame
object:
ncol = 2
diff_df = pd.concat([difference(df[i], 1) for i in range(1,ncol+1)], axis=1)
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_values = scaler.fit_transform(diff_df)
我真的很困惑试图解决这个问题。我正在尝试使用 sklearn 函数:MinMaxScaler
但出现错误,因为我似乎正在设置一个带有序列的数组元素。
密码是:
raw_values = series.values
# transform data to be stationary
diff_series = difference(raw_values, 1);
diff_values = diff_series.values;
diff_values = diff_values.reshape(len(diff_values), 1)
# rescale values to 0,1
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_values = scaler.fit_transform(diff_values); print(scaled_values)
scaled_values = scaled_values.reshape(len(scaled_values), 1)
"series" 是一个差异时间序列,我试图在 [0,1] 和 MinMaxScaler
之间重新缩放,并且时间序列之前在 pandas 中有所差异。
当 运行 代码时出现以下错误:
ValueError: setting an array element with a sequence.
我不明白的是,如果一列中只有一个 feature
或变量,代码运行正常,但在这种情况下 我有 2 features
,每一个在不同的列中。
回溯:
File "C:/....py", line 88, in prepare_data
scaled_values = scaler.fit_transform(diff_values); print(scaled_values)
File "C:\Users\name\AppData\Roaming\Python\Python35\site-packages\sklearn\base.py", line 494, in fit_transform
return self.fit(X, **fit_params).transform(X)
File "C:\Users\name\AppData\Roaming\Python\Python35\site-packages\sklearn\preprocessing\data.py", line 292, in fit
return self.partial_fit(X, y)
File "C:\Users\name\AppData\Roaming\Python\Python35\site-packages\sklearn\preprocessing\data.py", line 318, in partial_fit
estimator=self, dtype=FLOAT_DTYPES)
File "C:\Users\name\AppData\Roaming\Python\Python35\site-packages\sklearn\utils\validation.py", line 382, in check_array
array = np.array(array, dtype=dtype, order=order, copy=copy)
ValueError: setting an array element with a sequence.
这就是我打印 diff_values
[[array([ -1.3, 119. ])]
[array([ 0.5, -9. ])]
[array([ 0.8, 17. ])]
...,
[array([ 2.8, 742. ])]
[array([ 1.50000000e+00, -1.65900000e+03])]
[array([ -2., 856.])]]
完整代码不是我的,它是从 here
获得的编辑:
Here 是我的数据集
只要把名字'shampoo-sales.csv'换成'datos2.csv'和这句话:
return datetime.strptime('190'+x, '%Y-%m')
给这个:
return datetime.strptime(''+x, '%Y-%m-%d')
在您链接的教程中,object series
实际上是 Pandas Series
。它是一个信息向量,带有一个命名索引。然而,您的数据集包含两个信息字段,以及时间序列索引,这使其成为 DataFrame
。这就是教程代码与您的数据中断的原因。
这是您的数据示例:
import pandas as pd
def parser(x):
return datetime.strptime(''+x, '%Y-%m-%d')
df = pd.read_csv("datos2.csv", header=None, parse_dates=[0],
index_col=0, squeeze=True, date_parser=parser)
df.head()
1 2
0
2012-01-01 10.9 3736
2012-01-02 10.3 3570
2012-01-03 9.0 3689
2012-01-04 9.5 3680
2012-01-05 10.3 3697
以及教程中的等效部分:
"Running the example loads the dataset as a Pandas Series and prints the first 5 rows."
Month
1901-01-01 266.0
1901-02-01 145.9
1901-03-01 183.1
1901-04-01 119.3
1901-05-01 180.3
Name: Sales, dtype: float64
要验证这一点,select 您的一个字段并将其存储为 series
,然后尝试 运行 宁 MinMaxScaler
。您会看到 运行s 没有错误:
series = df[1]
# ... compute difference and do scaling ...
print(scaled_values)
[[ 0.58653846]
[ 0.55288462]
[ 0.63942308]
...,
[ 0.75 ]
[ 0.6875 ]
[ 0.51923077]]
注意:与教程数据相比,您的数据集中的另一个细微差别是您的数据中没有 header。设置 header=None
以避免将第一行数据分配为列 headers.
更新
要将整个数据集传递给 MinMaxScaler
,只需在两列上 运行 difference()
并传递转换后的向量以进行缩放。 MinMaxScaler
接受 n-dimensional DataFrame
object:
ncol = 2
diff_df = pd.concat([difference(df[i], 1) for i in range(1,ncol+1)], axis=1)
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_values = scaler.fit_transform(diff_df)