From d89dd00b476d25b99c74eb94f0dfd14ecc2ba14a Mon Sep 17 00:00:00 2001 From: Akmal Soliev Date: Wed, 17 Jan 2024 11:54:53 +0100 Subject: [PATCH 1/4] [FIX] Polars produces list rather than Pandas Index --- nbs/tsdataset.ipynb | 7 +++++-- neuralforecast/tsdataset.py | 7 +++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/nbs/tsdataset.ipynb b/nbs/tsdataset.ipynb index 92afc3eb3..d697d5028 100644 --- a/nbs/tsdataset.ipynb +++ b/nbs/tsdataset.ipynb @@ -61,7 +61,7 @@ "import torch\n", "import utilsforecast.processing as ufp\n", "from torch.utils.data import Dataset, DataLoader\n", - "from utilsforecast.compat import DataFrame, pl_Series" + "from utilsforecast.compat import DataFrame, pl_Series, pl_DataFrame" ] }, { @@ -354,7 +354,10 @@ "\n", " # Static features\n", " if static_df is not None:\n", - " static_cols = static_df.columns.drop(id_col)\n", + " if isinstance(static_df, pd.DataFrame):\n", + " static_cols = static_df.columns.drop(id_col)\n", + " elif isinstance(static_df, pl_DataFrame):\n", + " static_cols = [col for col in static_df.columns if col != id_col]\n", " static = ufp.to_numpy(static_df[static_cols])\n", " else:\n", " static = None\n", diff --git a/neuralforecast/tsdataset.py b/neuralforecast/tsdataset.py index e251bba47..50128b402 100644 --- a/neuralforecast/tsdataset.py +++ b/neuralforecast/tsdataset.py @@ -13,7 +13,7 @@ import torch import utilsforecast.processing as ufp from torch.utils.data import Dataset, DataLoader -from utilsforecast.compat import DataFrame, pl_Series +from utilsforecast.compat import DataFrame, pl_Series, pl_DataFrame # %% ../nbs/tsdataset.ipynb 5 class TimeSeriesLoader(DataLoader): @@ -317,7 +317,10 @@ def from_df( # Static features if static_df is not None: - static_cols = static_df.columns.drop(id_col) + if isinstance(static_df, pd.DataFrame): + static_cols = static_df.columns.drop(id_col) + elif isinstance(static_df, pl_DataFrame): + static_cols = [col for col in static_df.columns if col != id_col] static = ufp.to_numpy(static_df[static_cols]) else: static = None From 6bb30117c1481b3df03748c9fcd4833c03f5be85 Mon Sep 17 00:00:00 2001 From: Akmal Soliev Date: Wed, 17 Jan 2024 14:25:41 +0100 Subject: [PATCH 2/4] [FIX] `get_indexer_raise_missing` var type fix `get_indexer_raise_missing` required the variable `static_cols` to be `pd.Index`, this fixes that issue without modification to util package. --- nbs/tsdataset.ipynb | 3 +++ neuralforecast/tsdataset.py | 3 +++ 2 files changed, 6 insertions(+) diff --git a/nbs/tsdataset.ipynb b/nbs/tsdataset.ipynb index d697d5028..69dbacdb0 100644 --- a/nbs/tsdataset.ipynb +++ b/nbs/tsdataset.ipynb @@ -359,6 +359,9 @@ " elif isinstance(static_df, pl_DataFrame):\n", " static_cols = [col for col in static_df.columns if col != id_col]\n", " static = ufp.to_numpy(static_df[static_cols])\n", + " \n", + " if not isinstance(static_cols, pd.Index): \n", + " static_cols = pd.Index(static_cols)\n", " else:\n", " static = None\n", " static_cols = None\n", diff --git a/neuralforecast/tsdataset.py b/neuralforecast/tsdataset.py index 50128b402..ae312c27d 100644 --- a/neuralforecast/tsdataset.py +++ b/neuralforecast/tsdataset.py @@ -322,6 +322,9 @@ def from_df( elif isinstance(static_df, pl_DataFrame): static_cols = [col for col in static_df.columns if col != id_col] static = ufp.to_numpy(static_df[static_cols]) + + if not isinstance(static_cols, pd.Index): + static_cols = pd.Index(static_cols) else: static = None static_cols = None From 5fa2349b3d2151af5b62ce9c49581d7e1f2cea05 Mon Sep 17 00:00:00 2001 From: Akmal Soliev Date: Wed, 17 Jan 2024 17:01:15 +0100 Subject: [PATCH 3/4] [REFACTOR] Simplified the condition matching --- nbs/tsdataset.ipynb | 8 ++------ neuralforecast/tsdataset.py | 8 ++------ 2 files changed, 4 insertions(+), 12 deletions(-) diff --git a/nbs/tsdataset.ipynb b/nbs/tsdataset.ipynb index 69dbacdb0..15ef7a339 100644 --- a/nbs/tsdataset.ipynb +++ b/nbs/tsdataset.ipynb @@ -61,7 +61,7 @@ "import torch\n", "import utilsforecast.processing as ufp\n", "from torch.utils.data import Dataset, DataLoader\n", - "from utilsforecast.compat import DataFrame, pl_Series, pl_DataFrame" + "from utilsforecast.compat import DataFrame, pl_Series" ] }, { @@ -354,12 +354,8 @@ "\n", " # Static features\n", " if static_df is not None:\n", - " if isinstance(static_df, pd.DataFrame):\n", - " static_cols = static_df.columns.drop(id_col)\n", - " elif isinstance(static_df, pl_DataFrame):\n", - " static_cols = [col for col in static_df.columns if col != id_col]\n", + " static_cols = static_df.drop(columns=id_col).columns\n", " static = ufp.to_numpy(static_df[static_cols])\n", - " \n", " if not isinstance(static_cols, pd.Index): \n", " static_cols = pd.Index(static_cols)\n", " else:\n", diff --git a/neuralforecast/tsdataset.py b/neuralforecast/tsdataset.py index ae312c27d..f5eddadab 100644 --- a/neuralforecast/tsdataset.py +++ b/neuralforecast/tsdataset.py @@ -13,7 +13,7 @@ import torch import utilsforecast.processing as ufp from torch.utils.data import Dataset, DataLoader -from utilsforecast.compat import DataFrame, pl_Series, pl_DataFrame +from utilsforecast.compat import DataFrame, pl_Series # %% ../nbs/tsdataset.ipynb 5 class TimeSeriesLoader(DataLoader): @@ -317,12 +317,8 @@ def from_df( # Static features if static_df is not None: - if isinstance(static_df, pd.DataFrame): - static_cols = static_df.columns.drop(id_col) - elif isinstance(static_df, pl_DataFrame): - static_cols = [col for col in static_df.columns if col != id_col] + static_cols = static_df.drop(columns=id_col).columns static = ufp.to_numpy(static_df[static_cols]) - if not isinstance(static_cols, pd.Index): static_cols = pd.Index(static_cols) else: From d9a45cded3babaab5c8e689182e5256ad03d531b Mon Sep 17 00:00:00 2001 From: Akmal Soliev Date: Wed, 17 Jan 2024 17:28:19 +0100 Subject: [PATCH 4/4] [REFACTOR] List comprehension rather than `.drop` --- nbs/tsdataset.ipynb | 5 ++--- neuralforecast/tsdataset.py | 5 ++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/nbs/tsdataset.ipynb b/nbs/tsdataset.ipynb index 15ef7a339..08425f212 100644 --- a/nbs/tsdataset.ipynb +++ b/nbs/tsdataset.ipynb @@ -354,10 +354,9 @@ "\n", " # Static features\n", " if static_df is not None:\n", - " static_cols = static_df.drop(columns=id_col).columns\n", + " static_cols = [col for col in static_df.columns if col != id_col]\n", " static = ufp.to_numpy(static_df[static_cols])\n", - " if not isinstance(static_cols, pd.Index): \n", - " static_cols = pd.Index(static_cols)\n", + " static_cols = pd.Index(static_cols)\n", " else:\n", " static = None\n", " static_cols = None\n", diff --git a/neuralforecast/tsdataset.py b/neuralforecast/tsdataset.py index f5eddadab..f71ad66fe 100644 --- a/neuralforecast/tsdataset.py +++ b/neuralforecast/tsdataset.py @@ -317,10 +317,9 @@ def from_df( # Static features if static_df is not None: - static_cols = static_df.drop(columns=id_col).columns + static_cols = [col for col in static_df.columns if col != id_col] static = ufp.to_numpy(static_df[static_cols]) - if not isinstance(static_cols, pd.Index): - static_cols = pd.Index(static_cols) + static_cols = pd.Index(static_cols) else: static = None static_cols = None