【问题标题】:Apply MinMaxScaler() on a pandas column在 pandas 列上应用 MinMaxScaler()
【发布时间】:2019-01-09 14:22:08
【问题描述】:

我正在尝试使用 sklearn MinMaxScaler 重新缩放 python 列,如下所示:

scaler = MinMaxScaler()
y = scaler.fit(df['total_amount'])

但出现以下错误:

Traceback (most recent call last):
  File "/Users/edamame/workspace/git/my-analysis/experiments/my_seq.py", line 54, in <module>
    y = scaler.fit(df['total_amount'])
  File "/Users/edamame/workspace/git/my-analysis/venv/lib/python3.4/site-packages/sklearn/preprocessing/data.py", line 308, in fit
    return self.partial_fit(X, y)
  File "/Users/edamame/workspace/git/my-analysis/venv/lib/python3.4/site-packages/sklearn/preprocessing/data.py", line 334, in partial_fit
    estimator=self, dtype=FLOAT_DTYPES)
  File "/Users/edamame/workspace/git/my-analysis/venv/lib/python3.4/site-packages/sklearn/utils/validation.py", line 441, in check_array
    "if it contains a single sample.".format(array))
ValueError: Expected 2D array, got 1D array instead:
array=[3.180000e+00 2.937450e+03 6.023850e+03 2.216292e+04 1.074589e+04
   :
 0.000000e+00 0.000000e+00 9.000000e+01 1.260000e+03].
Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.

知道出了什么问题吗?

【问题讨论】:

  • .reshape(rows_num, -1).reshape(rows_num, 1) 以适应具有多行的数据框

标签: python-3.x pandas scikit-learn


【解决方案1】:

MinMaxScaler 的输入需要类似于数组,shape [n_samples, n_features]。因此,您可以将其作为 dataframe 而不是 series 应用于列(使用双方括号而不是单方括号):

y = scaler.fit(df[['total_amount']])

虽然从你的描述来看,听起来你想要fit_transform 而不仅仅是fit(但我可能是错的):

y = scaler.fit_transform(df[['total_amount']])

多一点解释:

如果您的数据框有 100 行,请考虑将列转换为数组时的形状差异:

>>> np.array(df[['total_amount']]).shape
(100, 1)

>>> np.array(df['total_amount']).shape
(100,)

第一个返回与[n_samples, n_features] 匹配的形状(根据 MinMaxScaler 的要求),而第二个不匹配。

【讨论】:

    【解决方案2】:

    尝试以这种方式进行:

    import pandas as pd
    from sklearn import preprocessing
    
    x = df.values #returns a numpy array
    min_max_scaler = preprocessing.MinMaxScaler()
    x_scaled = min_max_scaler.fit_transform(x)
    df = pd.DataFrame(x_scaled)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-25
      • 2017-06-10
      • 2016-06-15
      • 2023-04-08
      • 2022-10-15
      • 1970-01-01
      相关资源
      最近更新 更多