{"record":{"id":"5bc4d26e34514ba4","repo":"microsoft/qlib","slug":"empty-training-data-from-dataset-please-check-you","errorCode":null,"errorMessage":"Empty training data from dataset, please check your dataset config.","messagePattern":"Empty training data from dataset, please check your dataset config\\.","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"qlib/contrib/model/pytorch_gru.py","lineNumber":229,"sourceCode":"        dataset: DatasetH,\n        evals_result=dict(),\n        save_path=None,\n    ):\n        # prepare training and validation data\n        dfs = {\n            k: dataset.prepare(\n                k,\n                col_set=[\"feature\", \"label\"],\n                data_key=DataHandlerLP.DK_L,\n            )\n            for k in [\"train\", \"valid\"]\n            if k in dataset.segments\n        }\n        df_train, df_valid = dfs.get(\"train\", pd.DataFrame()), dfs.get(\"valid\", pd.DataFrame())\n\n        # check if training data is empty\n        if df_train.empty:\n            raise ValueError(\"Empty training data from dataset, please check your dataset config.\")\n\n        df_train = df_train.dropna()\n        x_train, y_train = df_train[\"feature\"], df_train[\"label\"]\n\n        # check if validation data is provided\n        if not df_valid.empty:\n            df_valid = df_valid.dropna()\n            x_valid, y_valid = df_valid[\"feature\"], df_valid[\"label\"]\n        else:\n            x_valid, y_valid = None, None\n\n        save_path = get_or_create_path(save_path)\n        stop_steps = 0\n        train_loss = 0\n        best_score = -np.inf\n        best_epoch = 0\n        evals_result[\"train\"] = []\n        evals_result[\"valid\"] = []","sourceCodeStart":211,"sourceCodeEnd":247,"githubUrl":"https://github.com/microsoft/qlib/blob/79633dd9506ea689e5400dea0197717b5b3d74b7/qlib/contrib/model/pytorch_gru.py#L211-L247","documentation":"Raised at the start of GRUModel.fit when the prepared train segment is an empty DataFrame. Unlike pytorch_general_nn (which also requires valid), GRU tolerates a missing/empty valid segment (it defaults to None) but hard-fails on empty train data, because there is nothing to optimize.","triggerScenarios":"fit(dataset) where dataset.prepare(\"train\", col_set=[\"feature\",\"label\"], data_key=DK_L) returns zero rows: train date range outside the data calendar, segment misnamed, or all rows dropped. Note the check runs BEFORE dropna, so data that becomes empty only after dropna() produces a different failure downstream (empty tensor batches), not this error.","commonSituations":"Train segment dates not covered by the dumped binary data; segment key typo such as \"Train\"; a learn-type processor removing every row; using an instrument universe with no overlapping dates.","solutions":["Print dataset.prepare('train', col_set=['feature','label'], data_key=DataHandlerLP.DK_L).shape and confirm it is non-empty.","Adjust train segment dates to overlap the data calendar produced by dump_bin.","Check instrument filters and processors are not eliminating all rows.","Ensure the segment key is exactly \"train\" in the dataset config."],"exampleFix":"# before\n\"segments\": {\"train\": (\"2025-01-01\", \"2025-12-31\")}  # data ends 2022 -> empty\n\n# after\n\"segments\": {\"train\": (\"2018-01-01\", \"2021-12-31\")}","handlingStrategy":"validation","validationCode":"df_train = dataset.prepare(\"train\", col_set=[\"feature\", \"label\"], data_key=DataHandlerLP.DK_L)\nassert not df_train.empty, \"train segment is empty; check segment dates and data calendar\"","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Verify prepared train rows before fit; remember the check precedes dropna, so also ensure dropna leaves rows.","Keep train dates within the dumped data calendar and confirm the segment key is exactly 'train'."],"tags":["qlib","dataset","configuration","data-validation"],"backgroundTag":null,"analyzedSha":"79633dd9506ea689e5400dea0197717b5b3d74b7","analyzedAt":"2026-08-15T07:01:27.511Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}