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

44,716

Here x>=0.25 & x<0.5 & performs a bitwise AND operation (for example, 1 & 52 is zero, which will be treated as False), while you certainly meant to check whether both x>=0.25 and x<0.5 are true.

So, do this:

x>=0.25 and x<0.5

The same mistake is on the next line.

Share:
44,716
Patthebug
Author by

Patthebug

Updated on July 09, 2022

Comments

  • Patthebug
    Patthebug almost 2 years

    I'm trying to convert a continuous variable to a categorical variable using the following code:

    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)
    

    but I get the following error:

    ---------------------------------------------------------------------------
    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'
    

    I would've though that float and numpy.float64 would be compatible but that doesn't seem to be the case.

    Any help in this regard would be much appreciated.

    TIA.

  • Patthebug
    Patthebug almost 8 years
    yes, that solved it, thanks a lot.