0

Data source can be found here.

I've hit a stumbling block in some code I'm writing because the fit_transform method continuously fails. It throws this error:

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.

I've done some searching on this online and arrived at a few potential solutions, but they didn't seem to work.

Here's my code:

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)

It throws the aforementioned error. A solution I saw advised me to use .values when transforming the data and I tried the following:

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)

The first and the third threw the same error which is below,:

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

While the second threw the first error I mentioned again:

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

I'm honestly stumped and I'm not sure where to go from here. The Kaggle exercise I learnt this from went smoothly, but for some reason things never do when I try my hand at things myself.

2
  • What do you want obj to be?
    – rickhg12hs
    Oct 29, 2020 at 2:17
  • It's a list of the object columns. Then oh_cols is the list of object columns I'd like to one-hot encode while te_cols is the list of objects I'd like to target encode. As you see it fails on the oh stage already.
    – Abubakar Popoola
    Oct 29, 2020 at 10:30

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.