microsoft/qlib · error · ValueError
Empty data from dataset, please check your dataset config.
Error message
Empty data from dataset, please check your dataset config.
What it means
LOCALTransformerModel.fit() prepares the 'train' and 'valid' segments (col_set=['feature','label'], data_key=DK_L) and immediately checks emptiness. If either prepared handler is empty it raises ValueError('Empty data from dataset, please check your dataset config.') before building DataLoaders — training cannot proceed on zero rows.
Source
Thrown at qlib/contrib/model/pytorch_localformer_ts.py:149
pred = self.model(feature.float()) # .float()
loss = self.loss_fn(pred, label)
losses.append(loss.item())
score = self.metric_fn(pred, label)
scores.append(score.item())
return np.mean(losses), np.mean(scores)
def fit(
self,
dataset: DatasetH,
evals_result=dict(),
save_path=None,
):
dl_train = dataset.prepare("train", col_set=["feature", "label"], data_key=DataHandlerLP.DK_L)
dl_valid = dataset.prepare("valid", col_set=["feature", "label"], data_key=DataHandlerLP.DK_L)
if dl_train.empty or dl_valid.empty:
raise ValueError("Empty data from dataset, please check your dataset config.")
dl_train.config(fillna_type="ffill+bfill") # process nan brought by dataloader
dl_valid.config(fillna_type="ffill+bfill") # process nan brought by dataloader
train_loader = DataLoader(
dl_train, batch_size=self.batch_size, shuffle=True, num_workers=self.n_jobs, drop_last=True
)
valid_loader = DataLoader(
dl_valid, batch_size=self.batch_size, shuffle=False, num_workers=self.n_jobs, drop_last=True
)
save_path = get_or_create_path(save_path)
stop_steps = 0
train_loss = 0
best_score = -np.inf
best_epoch = 0
evals_result["train"] = []
View on GitHub (pinned to 79633dd950)
Solutions
- Inspect dataset.prepare('train', col_set=['feature','label'], data_key='learn') and the 'valid' equivalent directly — confirm which one is empty and check its index length.
- Fix the segment date ranges in your DatasetH/handler config so they overlap the actual data calendar.
- Verify the underlying data handler actually loaded data: check the raw dataframe (data_handler.fetch) is non-empty and your instrument list survives filtering.
- If a processor dropped all rows (e.g. dropna-style processing), loosen it or extend the segment window.
Example fix
# before
handler = Alpha158(instruments=instruments, start_time='2025-01-01', end_time='2025-01-31')
dataset = DatasetH(handler, segments={'train': ('2024-01-01','2024-12-31'), ...}) # no data in range
model.fit(dataset) # ValueError: Empty data from dataset
# after
dataset = DatasetH(handler, segments={'train': ('2025-01-01','2025-01-15'), 'valid': ('2025-01-16','2025-01-31')})
model.fit(dataset) Defensive patterns
Strategy: validation
Validate before calling
for seg in ("train", "valid"):
df = dataset.prepare(seg, col_set=["feature", "label"], data_key="learn")
if df.empty:
raise ValueError(f"segment '{seg}' prepared empty; fix segment/handler config before fit") Try / catch
try:
model.fit(dataset)
except ValueError as e:
if "Empty data" in str(e):
# inspect dataset.prepare('train'/'valid') emptiness and fix segments/handler
raise
raise Prevention
- Always print dataset.segments and the handler's date coverage before fitting.
- Align segment windows with the trading calendar actually present in the data.
- Unit-test that prepare() returns non-empty frames for every segment in your config.
- Watch processors that drop rows (dropna-style) — they can empty small segments.
When it happens
Trigger: model.fit(dataset) where dataset.prepare('train') or dataset.prepare('valid') returns an empty handler: segments whose date ranges select no data, a data handler with no instruments/dates loaded, or a learned/processed handler whose filters removed everything.
Common situations: Segments (train/valid) whose start/end dates fall outside the calibrated data range; handler created with instruments that were all dropped; DK_L (learned) data key empty because a prior processor consumed all rows; timezone/date-format mistakes in segment definitions.
Related errors
- Empty data from dataset, please check your dataset config.
- Empty data from dataset, please check your dataset config.
- model is not fitted yet!
- optimizer {} is not supported!
- unknown loss `%s`
AI-assisted analysis of microsoft/qlib@79633dd950 (2026-08-15).
Data as JSON: /api/errors/50c569f2097c7fc3.
Report an issue: GitHub.