From 6af7ce4bcde4e6fec387b117adc52e951aed35b9 Mon Sep 17 00:00:00 2001 From: "Bobby Abellana (aider)" Date: Thu, 6 Feb 2025 23:42:40 -0800 Subject: [PATCH] fix: Improve stock data validation with explicit type conversion and logging --- src/screener/t_sunnyband.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/screener/t_sunnyband.py b/src/screener/t_sunnyband.py index dc9d126..01c3944 100644 --- a/src/screener/t_sunnyband.py +++ b/src/screener/t_sunnyband.py @@ -39,6 +39,13 @@ def get_stock_data(ticker: str, start_date: datetime, end_date: datetime, interv if df.empty: return df + # Convert numeric columns to float + for col in ['open', 'high', 'low', 'close']: + df[col] = pd.to_numeric(df[col], errors='coerce') + + # Remove rows with NaN values + df = df.dropna() + # Remove rows with suspicious values df = df[ (df['open'] > 0) & @@ -53,8 +60,14 @@ def get_stock_data(ticker: str, start_date: datetime, end_date: datetime, interv ] # Sort by date and remove duplicates - df = df.sort_values('date').drop_duplicates(subset=['date']) + df = df.sort_values('date', ascending=True).drop_duplicates(subset=['date']) + # Add validation message + if not df.empty: + print(f"Validated price for {ticker}:") + print(f"First price: ${df['close'].iloc[0]:.2f}") + print(f"Last price: ${df['close'].iloc[-1]:.2f}") + return df # Calculate proper date range (looking back from today)