Python beginner. I don't know how to solve this error occurred with the code below:TypeError: '>' not supported between instances of 'str' and 'float'

Question:

I’m following the tutorial on YouTube called Python programming for Finance. I’ve checked multiple times if I’ve wrote the same code of the YouTuber but I couldn’t find any error on the transcription. Could you help me in finding the error?

    import numpy as np
    import pandas as pd
    import pickle
    from collections import Counter
    
    def process_data_for_labels(ticker):
        hm_days = 7 
        df = pd.read_csv('sp500_joined_closes.csv', index_col=0)
        tickers = df.columns.values.tolist()
        df.fillna(0,inplace=True)
        
        
        for i in range(1, hm_days+1):
            
            
           df['{}_{}d'.format(ticker, i)] = (df[ticker].shift(-i) - df[ticker]) / df[ticker]
            
        df.fillna(0, inplace= True)
        return tickers, df
    
    
    
    def buy_sell_hold(*args): 
        cols = [c for c in args]
        requirement = 0.02
        for col in cols:
            if col > requirement:
                return 1
            if col < -requirement:
                return -1
        return 0
            

  

     def extract_featuresets(ticker):
            tickers, df = process_data_for_labels(ticker)
            
        #    df['{}_target'.format(ticker)] = list(map(buy_sell_hold,df[[c for c in df.columns if c not in tickers]].values))
            df['{}_target'.format(ticker)] = list(map(buy_sell_hold, 
                                                      df['{}_1d'.format(ticker)],
                                                      df['{}_2d'.format(ticker)],
                                                      df['{}_3d'.format(ticker)],
                                                      df['{}_4d'.format(ticker)],
                                                      df['{}_5d'.format(ticker)],
                                                      df['{}_6d'.format(ticker)],
                                                      df['{}_7d'.format(ticker)]))
            vals = df['{}_target'.format(ticker)].values.tolist()
            str_vals = [str(i) for i in vals]
            print('Data spread:', Counter(str_vals))  
            
            df.fillna(0,inplace=True)
            
            df=df.replace([np.inf,-np.inf], np.nan)
            df.dropna(inplace=True)
            
            df_vals = df[[ticker for ticker in tickers]].pct_change()
            df_vals = df_vals.replace([np.inf,-np.inf], 0)
            df_vals.fillna(0,inplace=True)
            
            X = df_vals.values
            Y = df['{}_target'.format(ticker)].values
            
            return X,Y, df
        
        extract_featuresets('AAPL')

this is the error if col > requirement:

TypeError: ‘>’ not supported between instances of ‘str’ and ‘float’

Asked By: Francesco Stocchi

||

Answers:

Well you’re doing a comparison between two differents types : A string and a Float.

You can convert the string variable using :

number = float(string)

So i your case :

def buy_sell_hold(*args): 
    cols = [c for c in args]
    requirement = 0.02
    for col in cols:
        if float(col) > requirement:
            return 1
        if float(col) < -requirement:
            return -1
    return 0

But make sure that the args only contains float or add a try catch around the conditions.

Answered By: Yasha_ops
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.