Skip to content

Commit 168962f

Browse files
authored
Merge pull request freqtrade#12953 from Briarion/fix/data-kitchen-fragmentation
fix: avoid DataFrame fragmentation in get_predictions_to_append
2 parents 3242be2 + 9560ba2 commit 168962f

1 file changed

Lines changed: 16 additions & 10 deletions

File tree

freqtrade/freqai/data_kitchen.py

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -428,22 +428,28 @@ def get_predictions_to_append(
428428
Get backtest prediction from current backtest period
429429
"""
430430

431-
append_df = DataFrame()
431+
# Build dict first and construct DataFrame once to avoid
432+
# column-by-column assignment which causes DataFrame fragmentation
433+
# and PerformanceWarning on large prediction sets.
434+
append_dict: dict[str, Any] = {}
435+
432436
for label in predictions.columns:
433-
append_df[label] = predictions[label]
434-
if append_df[label].dtype == object:
437+
append_dict[label] = predictions[label]
438+
if predictions[label].dtype == object:
435439
continue
436-
if "labels_mean" in self.data:
437-
append_df[f"{label}_mean"] = self.data["labels_mean"][label]
438-
if "labels_std" in self.data:
439-
append_df[f"{label}_std"] = self.data["labels_std"][label]
440+
if "labels_mean" in self.data and label in self.data["labels_mean"]:
441+
append_dict[f"{label}_mean"] = self.data["labels_mean"][label]
442+
if "labels_std" in self.data and label in self.data["labels_std"]:
443+
append_dict[f"{label}_std"] = self.data["labels_std"][label]
440444

441445
for extra_col in self.data["extra_returns_per_train"]:
442-
append_df[f"{extra_col}"] = self.data["extra_returns_per_train"][extra_col]
446+
append_dict[f"{extra_col}"] = self.data["extra_returns_per_train"][extra_col]
443447

444-
append_df["do_predict"] = do_predict
448+
append_dict["do_predict"] = do_predict
445449
if self.freqai_config["feature_parameters"].get("DI_threshold", 0) > 0:
446-
append_df["DI_values"] = self.DI_values
450+
append_dict["DI_values"] = self.DI_values
451+
452+
append_df = DataFrame(append_dict)
447453

448454
user_cols = [col for col in dataframe_backtest.columns if col.startswith("%%")]
449455
cols = ["date"]

0 commit comments

Comments
 (0)