web-dev-qa-db-fra.com

TypeError: type (s) d'opérande non pris en charge pour &: 'float' et 'numpy.float64'

J'essaie de convertir une variable continue en une variable catégorielle en utilisant le code suivant:

def score_to_categorical(x):
    if x<0.25:
        return 'very bad'
    if x>=0.25 & x<0.5:
        return 'bad'
    if x>=0.5 & x<0.75:
        return 'good'
    else:
        return 'very good'

ConceptTemp['Score'] = ConceptTemp['Score'].apply(score_to_categorical)
ConceptTemp1['Score'] = ConceptTemp1['Score'].apply(score_to_categorical)

mais j'obtiens l'erreur suivante:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-72-7ec42b055d4f> in <module>()
----> 1 ConceptTemp['Score'] = ConceptTemp['Score'].apply(score_to_categorical)
      2 ConceptTemp1['Score'] = ConceptTemp1['Score'].apply(score_to_categorical)

E:\Anaconda2\lib\site-packages\pandas\core\series.pyc in apply(self, func, convert_dtype, args, **kwds)
   2167             values = lib.map_infer(values, lib.Timestamp)
   2168 
-> 2169         mapped = lib.map_infer(values, f, convert=convert_dtype)
   2170         if len(mapped) and isinstance(mapped[0], Series):
   2171             from pandas.core.frame import DataFrame

pandas\src\inference.pyx in pandas.lib.map_infer (pandas\lib.c:62578)()

<ipython-input-11-1c4f9c7bfafe> in score_to_categorical(x)
     10     if x<0.25:
     11         return 'very bad'
---> 12     if x>=0.25 & x<0.5:
     13         return 'bad'
     14     if x>=0.5 & x<0.75:

TypeError: unsupported operand type(s) for &: 'float' and 'numpy.float64'

J'aurais bien pensé que float et numpy.float64 serait compatible mais cela ne semble pas être le cas.

Toute aide à cet égard serait très appréciée.

TIA.

8
Patthebug

Ici x>=0.25 & x<0.5& effectue une opération bit à bit ET (par exemple, 1 & 52 est zéro, qui sera traité comme False), alors que vous vouliez certainement vérifier si les deux x>=0.25etx<0.5 sont vrai.

Alors, faites ceci:

x>=0.25 and x<0.5

La même erreur se trouve sur la ligne suivante.

13
ForceBru