Python弃用警告:在 0.17 中弃用了将一维数组作为数据传递,并将在 0.19 中引发 ValueError

Python DeprecationWarning: Passing 1d arrays as data is deprecated in 0.17 and will raise ValueError in 0.19

根据我之前的问题,我正在将数据框中的特定列重新调整为介于 0 和 1 之间。

scaler = preprocessing.MinMaxScaler(feature_range=(0,1))
email['scaled_quantity'] = scaler.fit_transform(email['Quantity'])

不幸的是,我得到了这个错误

DeprecationWarning: Passing 1d arrays as data is deprecated in 0.17 and will raise ValueError in 0.19. Reshape your data either using X.reshape(-1, 1) if your data has a single feature or X.reshape(1, -1) if it contains a single sample.
  warnings.warn(DEPRECATION_MSG_1D, DeprecationWarning)

@Grr 建议我将缩放应用于整个数据框,但这不是一个选项。我需要按原样维护列,并且只想添加新的额外缩放列。

如何解决这个折旧错误?

干什么

scaler.fit_transform(email[['Quantity']])

而不是

scaler.fit_transform(email['Quantity'])

Demo:我使用了你上一个问题的样本数据集:

In [56]: scaler.fit_transform(df[['Event_Counts']])
Out[56]:
array([[ 0.99722347],
       [ 1.        ],
       [ 0.        ]])

注意 - 它生成了一个形状为 (3,1) 而不是 (3,)

的数组

作为新专栏:

In [58]: df['scaled_event_counts'] = scaler.fit_transform(df[['Event_Counts']])

In [59]: df
Out[59]:
       Date  Event_Counts  Category_A  Category_B  scaled_event_counts
0  20170401        982457           0           1             0.997223
1  20170402        982754           1           0             1.000000
2  20170402        875786           0           1             0.000000