Я пытаюсь преобразовать столбец str в число с плавающей точкой в ​​фрейме данных, используя Python 2 - PullRequest
0 голосов
/ 19 января 2019

Я новичок в анализе данных и ищу помощь. Я создаю свой алгоритм Knn с нуля, используя python. Мне нужно преобразовать один из столбцов моего фрейма данных, который является str, в число с плавающей точкой. Я использую python 2.Вот как выглядит фрейм данных.

    sepal_length  sepal_width  petal_length  petal_width CLASS_LABEL
0            6.1          2.9           4.7          1.4  versicolor
1            6.0          2.7           5.1          1.6  versicolor
2            5.4          3.0           4.5          1.5  versicolor
3            5.6          2.5           3.9          1.1  versicolor

Я должен преобразовать столбец CLASS_LABEL str в число с плавающей точкой.Заранее спасибо!

from scipy.io import arff
from io import StringIO
import scipy
import pandas as pd
import numpy as np
import math
train,meta = arff.loadarff(open('train.arff', 'r'))
train = pd.DataFrame(train)
print(train)
print(type(train))
train.CLASS_LABEL = train.CLASS_LABEL.astype('float64')
print(train['CLASS_LABEL'])

---------------------------------------------------------------------------

 ValueError                                Traceback (most recent call last)
<ipython-input-133-9b34833d2225> in <module>()
      2 # train.head()
      3 # print(type(train))
----> 4 train.CLASS_LABEL = train.CLASS_LABEL.astype('float64')
      5 print(train['CLASS_LABEL'])

/anaconda2/lib/python2.7/site-packages/pandas/util/_decorators.pyc in wrapper(*args, **kwargs)
    176                 else:
    177                     kwargs[new_arg_name] = new_arg_value
--> 178             return func(*args, **kwargs)
    179         return wrapper
    180     return _deprecate_kwarg

/anaconda2/lib/python2.7/site-packages/pandas/core/generic.pyc in astype(self, dtype, copy, errors, **kwargs)
   4999             # else, only a single dtype is given
   5000             new_data = self._data.astype(dtype=dtype, copy=copy, errors=errors,
-> 5001                                          **kwargs)
   5002             return self._constructor(new_data).__finalize__(self)
   5003 

/anaconda2/lib/python2.7/site-packages/pandas/core/internals.pyc in astype(self, dtype, **kwargs)
   3712 
   3713     def astype(self, dtype, **kwargs):
-> 3714         return self.apply('astype', dtype=dtype, **kwargs)
   3715 
   3716     def convert(self, **kwargs):

/anaconda2/lib/python2.7/site-packages/pandas/core/internals.pyc in apply(self, f, axes, filter, do_integrity_check, consolidate, **kwargs)
   3579 
   3580             kwargs['mgr'] = self
-> 3581             applied = getattr(b, f)(**kwargs)
   3582             result_blocks = _extend_blocks(applied, result_blocks)
   3583 

/anaconda2/lib/python2.7/site-packages/pandas/core/internals.pyc in astype(self, dtype, copy, errors, values, **kwargs)
    573     def astype(self, dtype, copy=False, errors='raise', values=None, **kwargs):
    574         return self._astype(dtype, copy=copy, errors=errors, values=values,
--> 575                             **kwargs)
    576 
    577     def _astype(self, dtype, copy=False, errors='raise', values=None,

/anaconda2/lib/python2.7/site-packages/pandas/core/internals.pyc in _astype(self, dtype, copy, errors, values, klass, mgr, **kwargs)
    662 
    663                 # _astype_nansafe works fine with 1-d only
--> 664                 values = astype_nansafe(values.ravel(), dtype, copy=True)
    665                 values = values.reshape(self.shape)
    666 

/anaconda2/lib/python2.7/site-packages/pandas/core/dtypes/cast.pyc in astype_nansafe(arr, dtype, copy)
    728 
    729     if copy:
--> 730         return arr.astype(dtype, copy=True)
    731     return arr.view(dtype)
    732 

ValueError: could not convert string to float: setosa

1 Ответ

0 голосов
/ 19 января 2019

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

Если вы хотите отобразить строковые категории в числа, вы можете использовать:

train["CLASS_LABEL"] = train["CLASS_LABEL"].factorize()[0]

это превратит ваши строки в числовые категории

...