Мое преобразование dataframe приводит к ошибке типа - PullRequest
0 голосов
/ 02 октября 2019

Этот код вызывает ошибку типа, но я не могу точно определить, в чем проблема. Я предполагаю, что у моего фрейма есть некоторые неверные данные, однако есть 10000 строк, поэтому сложно понять, что там происходит.

для i в cat_cols: data_frame [i] = lbl.fit_transform (data_frame [i]. fillna ('0'))

Ошибка:

> Traceback (most recent call last):   File "test_makeprediction.py",
> line 187, in test_maximum_condition
>     test_response = MakePrediction.predict(json_input)   File "C:\dev\anaconda3\lib\site-packages\predict-1.0.0-py3.7.egg\prediction\makeprediction.py",
> line 51, in predict
>     data_frame[i] = lbl.fit_transform(data_frame[i].fillna('0'))   File
> "C:\dev\anaconda3\lib\site-packages\sklearn\preprocessing\label.py",
> line 236, in fit_transform
>     self.classes_, y = _encode(y, encode=True)   File "C:\dev\anaconda3\lib\site-packages\sklearn\preprocessing\label.py",
> line 107, in _encode
>     raise TypeError("argument must be a string or number") TypeError: argument must be a string or number

Я добавил дополнительный код, но он генерирует новую ошибку.

Преобразовать в числовые значениядля сравнения

for i in cat_cols.describe(include=[np.object, np.numeric]).columns:

Я очень уверен, что это как-то связано с тем, как JSON исходит из моего API, однако все, что я вижу, выглядит как проверенное.

New Error:
Data Frame Row Count: 10000
Category Count: 74
Numerical Count: 19
[2019-10-02 13:45:31,993] ERROR in app: Exception on /predict [POST]
Traceback (most recent call last):
  File "C:\dev\anaconda3\lib\site-packages\flask\app.py", line 2446, in wsgi_app
    response = self.full_dispatch_request()
  File "C:\dev\anaconda3\lib\site-packages\flask\app.py", line 1951, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "C:\dev\anaconda3\lib\site-packages\flask\app.py", line 1820, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "C:\dev\anaconda3\lib\site-packages\flask\_compat.py", line 39, in reraise
    raise value
  File "C:\dev\anaconda3\lib\site-packages\flask\app.py", line 1949, in full_dispatch_request
    rv = self.dispatch_request()
  File "C:\dev\anaconda3\lib\site-packages\flask\app.py", line 1935, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "predictservice.py", line 63, in predict
    return_response = MakePrediction.predict(json_obj)
  File "C:\dev\anaconda3\lib\site-packages\predict-1.0.0-py3.7.egg\prediction\makeprediction.py", line 50, in predict
    for i in cat_cols.describe(include=[np.object, np.numeric]).columns:
AttributeError: 'Index' object has no attribute 'describe'

Ответы [ 2 ]

0 голосов
/ 02 октября 2019

Похоже, что моя проблема была решена с помощью этого кода, который я нашел в другом сообщении стека.

        data_frame[i] = lbl.fit_transform(
            data_frame[i].astype(str).fillna('0')
        )
0 голосов
/ 02 октября 2019

Вы можете попробовать это:

for i in data_frame.describe(include=[object, bool]).columns:

    data_frame[i] = lbl.fit_transform(
        data_frame[i].fillna('0')
    )

с .describe(include=[object, bool]) Я уверен, что я беру только категориальные или логические столбцы.

Другая альтернатива:

for i in cat_cols:

    data_frame[i] = lbl.fit_transform(
        data_frame[i].fillna('0').astype(str)
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...