【问题标题】:ML Code throws value error when transforming dataML 代码在转换数据时抛出值错误
【发布时间】:2021-02-11 01:10:18
【问题描述】:

数据源可以在here找到。

大家好,

我在编写的一些代码中遇到了一个绊脚石,因为 fit_transform 方法不断失败。它抛出这个错误:

Traceback (most recent call last):

  File "/home/user/Datasets/CSVs/Working/Playstore/untitled0.py", line 18, in <module>
    data = data[oh_cols].apply(oh.fit_transform)

  File "/usr/lib/python3.8/site-packages/pandas/core/frame.py", line 7547, in apply
    return op.get_result()

  File "/usr/lib/python3.8/site-packages/pandas/core/apply.py", line 180, in get_result
    return self.apply_standard()

  File "/usr/lib/python3.8/site-packages/pandas/core/apply.py", line 255, in apply_standard
    results, res_index = self.apply_series_generator()

  File "/usr/lib/python3.8/site-packages/pandas/core/apply.py", line 284, in apply_series_generator
    results[i] = self.f(v)

  File "/usr/lib/python3.8/site-packages/sklearn/preprocessing/_encoders.py", line 410, in fit_transform
    return super().fit_transform(X, y)

  File "/usr/lib/python3.8/site-packages/sklearn/base.py", line 690, in fit_transform
    return self.fit(X, **fit_params).transform(X)

  File "/usr/lib/python3.8/site-packages/sklearn/preprocessing/_encoders.py", line 385, in fit
    self._fit(X, handle_unknown=self.handle_unknown)

  File "/usr/lib/python3.8/site-packages/sklearn/preprocessing/_encoders.py", line 74, in _fit
    X_list, n_samples, n_features = self._check_X(X)

  File "/usr/lib/python3.8/site-packages/sklearn/preprocessing/_encoders.py", line 43, in _check_X
    X_temp = check_array(X, dtype=None)

  File "/usr/lib/python3.8/site-packages/sklearn/utils/validation.py", line 73, in inner_f
    return f(**kwargs)

  File "/usr/lib/python3.8/site-packages/sklearn/utils/validation.py", line 620, in check_array
    raise ValueError(

ValueError: Expected 2D array, got 1D array instead:
array=['Everyone' 'Everyone' 'Everyone' ... 'Everyone' 'Mature 17+' 'Everyone'].
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.

简而言之:

ValueError: Expected 2D array, got 1D array instead:

我在网上对此进行了一些搜索,并找到了一些潜在的解决方案,但它们似乎不起作用。

这是我的代码:

import pandas as pd
from sklearn.preprocessing import OneHotEncoder
from category_encoders import CatBoostEncoder,CountEncoder,TargetEncoder

data = pd.read_csv("/home/user/Datasets/CSVs/Working/Playstore/data.csv")


oh = OneHotEncoder()
cb = CatBoostEncoder()
ce = CountEncoder()
te = TargetEncoder()

obj = [i for i in data if data[i].dtypes=="object"]
unique = dict(zip(list(obj),[len(data[i].unique()) for i in obj]))
oh_cols = [i for i in unique if unique[i] < 100]
te_cols = [i for i in unique if unique[i] > 100]

data = data[oh_cols].apply(oh.fit_transform)

它会引发上述错误。我看到的一个解决方案建议我在转换数据时使用.values,我尝试了以下方法:

data = data[oh_cols].values.apply(oh.fit_transform)

data = data[oh_cols].apply(oh.fit_transform).values

encoding = np.array(data[oh_cols])
encoding.apply(oh.fit_transform)

第一个和第三个抛出了相同的错误,如下所示:

AttributeError: 'numpy.ndarray' object has no attribute 'apply'

虽然第二个抛出了我再次提到的第一个错误:

ValueError: Expected 2D array, got 1D array instead:

老实说,我很困惑,我不知道从这里去哪里。我从中学到的 Kaggle 练习进行得很顺利,但由于某种原因,当我亲自尝试时,事情总是做不到。

【问题讨论】:

    标签: python pandas scikit-learn transformation numpy-ndarray


    【解决方案1】:

    修复

    data_enc = oh.fit_transform(data[oh_cols])

    无论如何,这比apply 方法要好得多,因为现在oh 对象中有很多有用的信息,当您想要检查结果时,您可以稍后oh.transform 您的测试数据等。

    解释错误

    您的数据位于 pandas DataFrame 对象中。 pandas 函数 apply 正在尝试将 oh.fit_transform 应用于每一列,但 OneHotEncoder 需要二维输入。

    使用.valuesnp.array() 将您的数据帧转换为一个numpy 数组,但numpy 没有apply 方法。

    【讨论】:

    • 谢谢。我会尝试并回复你。
    猜你喜欢
    • 2021-06-03
    • 1970-01-01
    • 1970-01-01
    • 2020-12-12
    • 2018-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多