{"record":{"id":"df2d6aaf266b7253","repo":"microsoft/qlib","slug":"empty-data-from-dataset-please-check-your-dataset-df2d6a","errorCode":null,"errorMessage":"Empty data from dataset, please check your dataset config.","messagePattern":"Empty data from dataset, please check your dataset config\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"qlib/contrib/model/pytorch_localformer.py","lineNumber":170,"sourceCode":"\r\n                score = self.metric_fn(pred, label)\r\n                scores.append(score.item())\r\n\r\n        return np.mean(losses), np.mean(scores)\r\n\r\n    def fit(\r\n        self,\r\n        dataset: DatasetH,\r\n        evals_result=dict(),\r\n        save_path=None,\r\n    ):\r\n        df_train, df_valid, df_test = dataset.prepare(\r\n            [\"train\", \"valid\", \"test\"],\r\n            col_set=[\"feature\", \"label\"],\r\n            data_key=DataHandlerLP.DK_L,\r\n        )\r\n        if df_train.empty or df_valid.empty:\r\n            raise ValueError(\"Empty data from dataset, please check your dataset config.\")\r\n\r\n        x_train, y_train = df_train[\"feature\"], df_train[\"label\"]\r\n        x_valid, y_valid = df_valid[\"feature\"], df_valid[\"label\"]\r\n\r\n        save_path = get_or_create_path(save_path)\r\n        stop_steps = 0\r\n        train_loss = 0\r\n        best_score = -np.inf\r\n        best_epoch = 0\r\n        evals_result[\"train\"] = []\r\n        evals_result[\"valid\"] = []\r\n\r\n        # train\r\n        self.logger.info(\"training...\")\r\n        self.fitted = True\r\n\r\n        for step in range(self.n_epochs):\r\n            self.logger.info(\"Epoch%d:\", step)\r","sourceCodeStart":152,"sourceCodeEnd":188,"githubUrl":"https://github.com/microsoft/qlib/blob/79633dd9506ea689e5400dea0197717b5b3d74b7/qlib/contrib/model/pytorch_localformer.py#L152-L188","documentation":"LocalTransformerModel.fit requires non-empty train and valid segments. dataset.prepare over ['train','valid','test'] with feature/label columns (DK_L) must return rows for at least train and valid; otherwise the run aborts with this dataset-config ValueError before training.","triggerScenarios":"fit(dataset) with an empty train or valid frame: bad segment dates, unresolved instruments, or features/labels reduced to nothing by the data handler.","commonSituations":"Calendar mismatch between segments and dumped data; wrong provider_uri in qlib.init; handler processors (e.g. dropna) removing all rows.","solutions":["Verify dataset.prepare('train'/'valid') are non-empty and fix segment definitions","Confirm data exists for the configured instruments and date range","Check handler processors are not dropping every row (e.g. extreme dropna after normalization)"],"exampleFix":"# before\nmodel.fit(dataset)\n\n# after\nfor seg in (\"train\", \"valid\"):\n    df = dataset.prepare(seg, col_set=[\"feature\", \"label\"])\n    assert not df.empty, f\"{seg} is empty\"\nmodel.fit(dataset)","handlingStrategy":"validation","validationCode":"for seg in (\"train\", \"valid\"):\n    df = dataset.prepare(seg, col_set=[\"feature\", \"label\"], data_key=DataHandlerLP.DK_L)\n    if df.empty:\n        raise RuntimeError(f\"{seg} empty; fix dataset segments or data\")","typeGuard":null,"tryCatchPattern":"try:\n    model.fit(dataset)\nexcept ValueError as e:\n    if \"Empty data\" in str(e):\n        raise RuntimeError(\"Dataset config produced empty train/valid\") from e\n    raise","preventionTips":["Pre-check segment frames before every fit","Validate that data handler processors do not drop all rows (dropna after NaN-inducing ops)"],"tags":["qlib","localformer","dataset-config","training-data"],"backgroundTag":null,"analyzedSha":"79633dd9506ea689e5400dea0197717b5b3d74b7","analyzedAt":"2026-08-15T07:01:27.511Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}