@@ -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