diff --git a/openbb_sdk/extensions/qa/openbb_qa/qa_helpers.py b/openbb_sdk/extensions/qa/openbb_qa/qa_helpers.py index c1fdc41e1f1..c8d818ce107 100644 --- a/openbb_sdk/extensions/qa/openbb_qa/qa_helpers.py +++ b/openbb_sdk/extensions/qa/openbb_qa/qa_helpers.py @@ -41,6 +41,13 @@ def get_fama_raw(start_date: str, end_date: str) -> pd.DataFrame: df["HML"] = df["HML"] / 100 df["RF"] = df["RF"] / 100 df = df.set_index("Date") + + dt_start_date = pd.to_datetime(start_date, format="%Y-%m-%d") + if dt_start_date > df.index.max(): + raise ValueError( + f"Start date '{dt_start_date}' is after the last date available for Fama-French '{df.index[-1]}'" + ) + df = df.loc[start_date:end_date] # type: ignore return df diff --git a/openbb_sdk/extensions/qa/openbb_qa/qa_router.py b/openbb_sdk/extensions/qa/openbb_qa/qa_router.py index 8d26ed570ce..24451ce65aa 100644 --- a/openbb_sdk/extensions/qa/openbb_qa/qa_router.py +++ b/openbb_sdk/extensions/qa/openbb_qa/qa_router.py @@ -85,7 +85,7 @@ def capm(data: List[Data], target: str) -> OBBject[CAPMModel]: df_target = get_target_columns(df, ["date", target]) df_target = df_target.set_index("date") - df_target["return"] = df_target.pct_change() + df_target.loc[:, "return"] = df_target.pct_change() df_target = df_target.dropna() start_date = df_target.index.min().strftime("%Y-%m-%d") end_date = df_target.index.max().strftime("%Y-%m-%d") diff --git a/openbb_sdk/sdk/core/openbb_core/app/utils.py b/openbb_sdk/sdk/core/openbb_core/app/utils.py index 14f8874539e..30245803a1e 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/utils.py +++ b/openbb_sdk/sdk/core/openbb_core/app/utils.py @@ -9,9 +9,14 @@ def basemodel_to_df( ) -> pd.DataFrame: """Convert list of BaseModel to a Pandas DataFrame.""" - data_list = [data] if not isinstance(data, list) else data + if isinstance(data, list): + df = pd.DataFrame([d.dict() for d in data]) + else: + try: + df = pd.DataFrame(data.dict()) + except ValueError: + df = pd.DataFrame(data.dict(), index=["values"]) - df = pd.DataFrame([d.dict() for d in data_list]) if index and index in df.columns: df = df.set_index(index) if df.index.name == "date":